diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index 9d3bd639e1..aa549c0361 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -13,6 +13,12 @@ services: POSTGRES_USER: inventree_user POSTGRES_PASSWORD: inventree_password + redis: + image: redis:7.0 + restart: always + expose: + - 6379 + inventree: build: context: .. @@ -31,6 +37,8 @@ services: INVENTREE_DB_HOST: db INVENTREE_DB_USER: inventree_user INVENTREE_DB_PASSWORD: inventree_password + INVENTREE_CACHE_HOST: redis + INVENTREE_CACHE_PORT: 6379 INVENTREE_PLUGINS_ENABLED: True INVENTREE_SITE_URL: http://localhost:8000 INVENTREE_CORS_ORIGIN_ALLOW_ALL: True diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index 44ba540d33..41e5db55a9 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -49,9 +49,10 @@ runs: shell: bash run: | python3 -m pip install -U pip - pip3 install invoke wheel uv - - name: Set the VIRTUAL_ENV variable for uv to work - run: echo "VIRTUAL_ENV=${Python_ROOT_DIR}" >> $GITHUB_ENV + pip3 install -U invoke wheel + pip3 install 'uv<0.3.0' + - name: Allow uv to use the system Python by default + run: echo "UV_SYSTEM_PYTHON=1" >> $GITHUB_ENV shell: bash - name: Install Specific Python Dependencies if: ${{ inputs.pip-dependency }} @@ -82,7 +83,7 @@ runs: # Invoke commands - name: Install dev requirements - if: ${{ inputs.dev-install == 'true' ||inputs.install == 'true' }} + if: ${{ inputs.dev-install == 'true' || inputs.install == 'true' }} shell: bash run: uv pip install --require-hashes -r src/backend/requirements-dev.txt - name: Run invoke install diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0a6bdd5b8f..8d14eeb906 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,26 +15,11 @@ updates: interval: weekly - package-ecosystem: pip - directory: /contrib/container - schedule: - interval: weekly - - - package-ecosystem: pip - directory: /docs - schedule: - interval: weekly - - - package-ecosystem: npm - directory: /src/backend - schedule: - interval: weekly - groups: - dependencies: - patterns: - - "*" # Include all dependencies - - - package-ecosystem: pip - directory: /src/backend + directories: + - /contrib/container + - /docs + - /.github + - /src/backend schedule: interval: weekly groups: @@ -43,7 +28,9 @@ updates: - "*" # Include all dependencies - package-ecosystem: npm - directory: /src/frontend + directories: + - /src/frontend + - /src/backend schedule: interval: weekly groups: diff --git a/.github/release.yml b/.github/release.yml index 65b45fc3da..182d1a747a 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -31,6 +31,9 @@ changelog: - setup - demo - CI + - title: Dependencies + labels: + - dependency - title: Other Changes labels: - "*" diff --git a/.github/requirements.in b/.github/requirements.in deleted file mode 100644 index 5d479962c1..0000000000 --- a/.github/requirements.in +++ /dev/null @@ -1,3 +0,0 @@ -# Packages needed for CI - requests==2.31.0 - pyyaml==6.0.1 diff --git a/.github/workflows/check_translations.yaml b/.github/workflows/check_translations.yaml index 9565f1a6d8..8ace00f569 100644 --- a/.github/workflows/check_translations.yaml +++ b/.github/workflows/check_translations.yaml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 7c5b9d9384..df945dc432 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -39,19 +39,16 @@ jobs: docker: ${{ steps.filter.outputs.docker }} steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 id: filter with: filters: | docker: - .github/workflows/docker.yaml - - docker/** - - docker-compose.yml - - docker.dev.env - - Dockerfile - - InvenTree/settings.py - - requirements.txt + - contrib/container/** + - src/backend/InvenTree/InvenTree/settings.py + - src/backend/requirements.txt - tasks.py # Build the docker image @@ -69,14 +66,14 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Set Up Python ${{ env.python_version }} uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 with: python-version: ${{ env.python_version }} - name: Version Check run: | - pip install --require-hashes -r .github/requirements.txt + pip install --require-hashes -r contrib/dev_reqs/requirements.txt python3 .github/scripts/version_check.py echo "git_commit_hash=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "git_commit_date=$(git show -s --format=%ci)" >> $GITHUB_ENV @@ -88,12 +85,17 @@ jobs: docker run --rm inventree-test invoke --list docker run --rm inventree-test gunicorn --version docker run --rm inventree-test pg_dump --version + docker run --rm inventree-test test -f /home/inventree/init.sh + docker run --rm inventree-test test -f /home/inventree/tasks.py + docker run --rm inventree-test test -f /home/inventree/gunicorn.conf.py + docker run --rm inventree-test test -f /home/inventree/src/backend/requirements.txt docker run --rm inventree-test test -f /home/inventree/src/backend/InvenTree/manage.py - name: Build Docker Image # Build the development docker image (using docker-compose.yml) run: docker compose --project-directory . -f contrib/container/dev-docker-compose.yml build --no-cache - name: Update Docker Image run: | + docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke install docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke update docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run inventree-dev-server invoke setup-dev docker compose --project-directory . -f contrib/container/dev-docker-compose.yml up -d @@ -124,7 +126,7 @@ jobs: uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # pin@v3.0.0 - name: Set up Docker Buildx if: github.event_name != 'pull_request' - uses: docker/setup-buildx-action@2b51285047da1547ffb1b2203d8be4c0af6b1f20 # pin@v3.2.0 + uses: docker/setup-buildx-action@d70bba72b1f3fd22344832f00baa16ece964efeb # pin@v3.3.0 - name: Set up cosign if: github.event_name != 'pull_request' uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # pin@v3.5.0 diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 1b778950bb..e1ed0a7a0a 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -40,7 +40,7 @@ jobs: force: ${{ steps.force.outputs.force }} steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 id: filter with: @@ -72,7 +72,7 @@ jobs: needs: ["pre-commit"] steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -94,7 +94,7 @@ jobs: if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.frontend == 'true' || needs.paths-filter.outputs.force == 'true' steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Set up Python ${{ env.python_version }} uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 with: @@ -104,7 +104,7 @@ jobs: uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # pin@v3.0.1 - name: Check Version run: | - pip install --require-hashes -r .github/requirements.txt + pip install --require-hashes -r contrib/dev_reqs/requirements.txt python3 .github/scripts/version_check.py mkdocs: @@ -115,15 +115,15 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Set up Python ${{ env.python_version }} uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # pin@v5.1.0 with: python-version: ${{ env.python_version }} - name: Check Config run: | - pip install --require-hashes -r .github/requirements.txt - pip install -r docs/requirements.txt + pip install --require-hashes -r contrib/dev_reqs/requirements.txt + pip install --require-hashes -r docs/requirements.txt python docs/ci/check_mkdocs_config.py - name: Check Links uses: gaurav-nelson/github-action-markdown-link-check@5c5dfc0ac2e225883c0e5f03a85311ec2830d368 # v1 @@ -151,7 +151,7 @@ jobs: version: ${{ steps.version.outputs.version }} steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -161,14 +161,14 @@ jobs: - name: Export API Documentation run: invoke schema --ignore-warnings --filename src/backend/InvenTree/schema.yml - name: Upload schema - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # pin@v4.3.1 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # pin@v4.3.3 with: name: schema.yml path: src/backend/InvenTree/schema.yml - name: Download public schema if: needs.paths-filter.outputs.api == 'false' run: | - pip install --require-hashes -r .github/requirements.txt >/dev/null 2>&1 + pip install --require-hashes -r contrib/dev_reqs/requirements.txt >/dev/null 2>&1 version="$(python3 .github/scripts/version_check.py only_version 2>&1)" echo "Version: $version" url="https://raw.githubusercontent.com/inventree/schema/main/export/${version}/api.yaml" @@ -187,7 +187,7 @@ jobs: id: version if: github.ref == 'refs/heads/master' && needs.paths-filter.outputs.api == 'true' run: | - pip install --require-hashes -r .github/requirements.txt >/dev/null 2>&1 + pip install --require-hashes -r contrib/dev_reqs/requirements.txt >/dev/null 2>&1 version="$(python3 .github/scripts/version_check.py only_version 2>&1)" echo "Version: $version" echo "version=$version" >> "$GITHUB_OUTPUT" @@ -201,12 +201,12 @@ jobs: version: ${{ needs.schema.outputs.version }} steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 with: repository: inventree/schema token: ${{ secrets.SCHEMA_PAT }} - name: Download schema artifact - uses: actions/download-artifact@c850b930e6ba138125429b7e5c93fc707a7f8427 # v4.1.4 + uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4.1.7 with: name: schema.yml - name: Move schema to correct location @@ -238,7 +238,7 @@ jobs: INVENTREE_SITE_URL: http://127.0.0.1:12345 steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -261,21 +261,25 @@ jobs: coverage run -m unittest discover -s test/ coverage: - name: Tests - DB [SQLite] + Coverage + name: Tests - DB [SQLite] + Coverage ${{ matrix.python_version }} runs-on: ubuntu-20.04 needs: ["pre-commit", "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: + matrix: + python_version: [3.9, 3.12] env: INVENTREE_DB_NAME: ./inventree.sqlite INVENTREE_DB_ENGINE: sqlite3 INVENTREE_PLUGINS_ENABLED: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + python_version: ${{ matrix.python_version }} steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -291,7 +295,7 @@ jobs: - name: Coverage Tests run: invoke test --coverage - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed # pin@v4.3.0 + uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # pin@v4.4.1 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -329,7 +333,7 @@ jobs: - 6379:6379 steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -373,7 +377,7 @@ jobs: - 3306:3306 steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -412,7 +416,7 @@ jobs: - 5432:5432 steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -423,7 +427,7 @@ jobs: - name: Run Tests run: invoke test --migrations --report --coverage - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@84508663e988701840491b86de86b666e8a86bed # pin@v4.3.0 + uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # pin@v4.4.1 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -443,7 +447,7 @@ jobs: INVENTREE_PLUGINS_ENABLED: false steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 name: Checkout Code - name: Environment Setup uses: ./.github/actions/setup @@ -500,7 +504,7 @@ jobs: VITE_COVERAGE: true steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -518,7 +522,7 @@ jobs: - name: Run Playwright tests id: tests run: cd src/frontend && npx nyc playwright test - - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # pin@v4 + - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # pin@v4 if: ${{ !cancelled() && steps.tests.outcome == 'failure' }} with: name: playwright-report @@ -528,7 +532,7 @@ jobs: if: always() 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@84508663e988701840491b86de86b666e8a86bed # pin@v4.3.0 + uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # pin@v4.4.1 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -541,7 +545,7 @@ jobs: timeout-minutes: 60 steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: @@ -554,7 +558,7 @@ jobs: run: | cd src/backend/InvenTree/web/static zip -r frontend-build.zip web/ web/.vite - - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # pin@v4.3.1 + - uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # pin@v4.3.3 with: name: frontend-build path: src/backend/InvenTree/web/static/web diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 1a74ca3d68..f93c99a1ec 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -5,20 +5,20 @@ on: release: types: [published] -permissions: - contents: read - jobs: stable: runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout Code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Version Check run: | - pip install --require-hashes -r .github/requirements.txt + pip install --require-hashes -r contrib/dev_reqs/requirements.txt python3 .github/scripts/version_check.py - name: Push to Stable Branch uses: ad-m/github-push-action@d91a481090679876dfc4178fef17f286781251df # pin@v0.8.0 @@ -30,8 +30,11 @@ jobs: publish-build: runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 6db68c5d05..1fcff72b3d 100644 --- a/.github/workflows/scorecard.yaml +++ b/.github/workflows/scorecard.yaml @@ -32,12 +32,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@93ea575cb5d8a053eaa0ac8fa3b40d7e05a33cc8 # v3.1.0 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1 + uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 # v2.3.3 with: results_file: results.sarif results_format: sarif @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 with: name: SARIF file path: results.sarif @@ -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@df5a14dc28094dc936e103b37d749c6628682b60 # v3.25.0 + uses: github/codeql-action/upload-sarif@9fdb3e49720b44c48891d036bb502feb25684276 # v3.25.6 with: sarif_file: results.sarif diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml index c0438b60ea..fc2968e479 100644 --- a/.github/workflows/translations.yaml +++ b/.github/workflows/translations.yaml @@ -30,7 +30,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # pin@v4.1.1 + uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # pin@v4.1.6 - name: Environment Setup uses: ./.github/actions/setup with: diff --git a/.gitignore b/.gitignore index 8c119f2ab2..4bc362f653 100644 --- a/.gitignore +++ b/.gitignore @@ -108,5 +108,6 @@ src/backend/InvenTree/web/static InvenTree/web/static # Generated docs files +docs/schema.yml docs/docs/api/*.yml docs/docs/api/schema/*.yml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0f8057da83..6c99a6f6d5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,8 +39,16 @@ repos: files: src/backend/requirements\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [.github/requirements.in, -o, .github/requirements.txt,--python-version=3.9, --no-strip-extras, --generate-hashes] - files: .github/requirements\.(in|txt)$ + args: [contrib/dev_reqs/requirements.in, -o, contrib/dev_reqs/requirements.txt,--python-version=3.9, --no-strip-extras, --generate-hashes] + files: contrib/dev_reqs/requirements\.(in|txt)$ + - id: pip-compile + name: pip-compile requirements.txt + args: [docs/requirements.in, -o, docs/requirements.txt,--python-version=3.9, --no-strip-extras, --generate-hashes] + files: docs/requirements\.(in|txt)$ + - id: pip-compile + name: pip-compile requirements.txt + args: [contrib/container/requirements.in, -o, contrib/container/requirements.txt,--python-version=3.11, --no-strip-extras, --generate-hashes] + files: contrib/container/requirements\.(in|txt)$ - repo: https://github.com/Riverside-Healthcare/djLint rev: v1.34.1 hooks: @@ -84,3 +92,7 @@ repos: # rev: 3.0.0 # hooks: # - id: shellcheck +- repo: https://github.com/isidentical/teyit + rev: 0.4.3 + hooks: + - id: teyit diff --git a/README.md b/README.md index 8c21973f35..f329c20758 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ Refer to the [getting started guide](https://docs.inventree.org/en/latest/start/ ## :iphone: Mobile App -InvenTree is supported by a [companion mobile app](https://docs.inventree.org/en/latest/app/app/) which allows users access to stock control information and functionality. +InvenTree is supported by a [companion mobile app](https://docs.inventree.org/app/) which allows users access to stock control information and functionality.

Android Play Store diff --git a/contrib/container/.env b/contrib/container/.env index 447ede63b4..a180d82dc2 100644 --- a/contrib/container/.env +++ b/contrib/container/.env @@ -28,6 +28,7 @@ INVENTREE_DB_PASSWORD=pgpassword # Un-comment the following lines to enable Redis cache # Note that you will also have to run docker-compose with the --profile redis command # Refer to settings.py for other cache options +#INVENTREE_CACHE_ENABLED=True #INVENTREE_CACHE_HOST=inventree-cache #INVENTREE_CACHE_PORT=6379 diff --git a/contrib/container/Caddyfile b/contrib/container/Caddyfile index f1b1532028..96fb01c52a 100644 --- a/contrib/container/Caddyfile +++ b/contrib/container/Caddyfile @@ -1,7 +1,10 @@ -# Caddyfile for Inventree +# Example Caddyfile for Inventree # The following environment variables may be used: # - INVENTREE_SITE_URL: The upstream URL of the Inventree site (default: inventree.localhost) # - INVENTREE_SERVER: The internal URL of the Inventree container (default: http://inventree-server:8000) +# +# Note that while this file is a good starting point, it may need to be modified to suit your specific requirements + (log_common) { log { diff --git a/contrib/container/Dockerfile b/contrib/container/Dockerfile index 3b1783a27e..572a286f5d 100644 --- a/contrib/container/Dockerfile +++ b/contrib/container/Dockerfile @@ -97,14 +97,14 @@ FROM inventree_base AS prebuild ENV PATH=/root/.local/bin:$PATH RUN ./install_build_packages.sh --no-cache --virtual .build-deps && \ - pip install --user -r base_requirements.txt --no-cache && \ + pip install --user --require-hashes -r base_requirements.txt --no-cache && \ pip install --user --require-hashes -r requirements.txt --no-cache && \ apk --purge del .build-deps # Frontend builder image: FROM prebuild AS frontend -RUN apk add --no-cache --update nodejs npm && npm install -g yarn@v1.22.22 --ignore-scripts +RUN apk add --no-cache --update nodejs npm yarn RUN yarn config set network-timeout 600000 -g COPY src ${INVENTREE_HOME}/src COPY tasks.py ${INVENTREE_HOME}/tasks.py @@ -128,6 +128,7 @@ COPY --from=prebuild /root/.local /root/.local # Copy source code COPY src/backend/InvenTree ${INVENTREE_BACKEND_DIR}/InvenTree +COPY src/backend/requirements.txt ${INVENTREE_BACKEND_DIR}/requirements.txt COPY --from=frontend ${INVENTREE_BACKEND_DIR}/InvenTree/web/static/web ${INVENTREE_BACKEND_DIR}/InvenTree/web/static/web # Launch the production server @@ -141,11 +142,11 @@ EXPOSE 5173 # Install packages required for building python packages RUN ./install_build_packages.sh -RUN pip install uv==0.1.26 --no-cache-dir && pip install -r base_requirements.txt --no-cache +RUN pip install --require-hashes -r base_requirements.txt --no-cache # Install nodejs / npm / yarn -RUN apk add --no-cache --update nodejs npm && npm install -g yarn@v1.22.22 --ignore-scripts +RUN apk add --no-cache --update nodejs npm yarn RUN yarn config set network-timeout 600000 -g # The development image requires the source code to be mounted to /home/inventree/ diff --git a/contrib/container/docker-compose.yml b/contrib/container/docker-compose.yml index 5fa1532481..de38b655b8 100644 --- a/contrib/container/docker-compose.yml +++ b/contrib/container/docker-compose.yml @@ -53,14 +53,9 @@ services: restart: unless-stopped # redis acts as database cache manager - # only runs under the "redis" profile : https://docs.docker.com/compose/profiles/ inventree-cache: image: redis:7.0 container_name: inventree-cache - depends_on: - - inventree-db - profiles: - - redis env_file: - .env expose: @@ -114,9 +109,23 @@ services: env_file: - .env volumes: - - ./Caddyfile:/etc/caddy/Caddyfile:ro + - ./Caddyfile:/etc/caddy/Caddyfile:ro,z - ${INVENTREE_EXT_VOLUME}/static:/var/www/static:z - ${INVENTREE_EXT_VOLUME}/media:/var/www/media:z - ${INVENTREE_EXT_VOLUME}:/var/log:z - ${INVENTREE_EXT_VOLUME}:/data:z - ${INVENTREE_EXT_VOLUME}:/config:z + + # alternative: run nginx as reverse proxy + # inventree-proxy: + # container_name: inventree-proxy + # image: nginx:stable + # restart: always + # depends_on: + # - inventree-server + # ports: + # - ${INVENTREE_WEB_PORT:-80}:80 + # - 443:443 + # volumes: + # - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro,z + # - ${INVENTREE_EXT_VOLUME}:/var/www:z diff --git a/contrib/container/nginx.conf b/contrib/container/nginx.conf new file mode 100644 index 0000000000..91b82adae1 --- /dev/null +++ b/contrib/container/nginx.conf @@ -0,0 +1,70 @@ +# An example configuration file for running InvenTree container behind an nginx proxy +# While suitable for a simple installation, this file will likely require some modification +# if you are running a more complex setup (e.g behind another proxy, or with HTTPS) + +server { + + # Listen for connection on (internal) port 80 + # If you are exposing this server to the internet, you should use HTTPS! + # In which case, you should also set up a redirect from HTTP to HTTPS, and listen on port 443 + # See the Nginx documentation for more details + listen 80; + + real_ip_header proxy_protocol; + + location / { + + proxy_set_header Host $http_host; + proxy_set_header X-Forwarded-By $server_addr:$server_port; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header CLIENT_IP $remote_addr; + + proxy_pass_request_headers on; + + proxy_redirect off; + + client_max_body_size 100M; + + proxy_buffering off; + proxy_request_buffering off; + + # Do not touch this unless you have a specific reason - this and the docker-compose need to match + proxy_pass http://inventree-server:8000; + } + + # Redirect any requests for static files + location /static/ { + alias /var/www/static/; + autoindex on; + + # Caching settings + expires 30d; + add_header Pragma public; + add_header Cache-Control "public"; + } + + # Redirect any requests for media files + location /media/ { + alias /var/www/media/; + + # Media files require user authentication + auth_request /auth; + + # Content header to force download + add_header Content-disposition "attachment"; + } + + # Use the 'user' API endpoint for auth + location /auth { + internal; + + proxy_pass http://inventree-server:8000/auth/; + + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + proxy_set_header X-Original-URI $request_uri; + } + +} diff --git a/contrib/container/requirements.in b/contrib/container/requirements.in new file mode 100644 index 0000000000..47968937a5 --- /dev/null +++ b/contrib/container/requirements.in @@ -0,0 +1,22 @@ +# Base python requirements for docker containers + +# Basic package requirements +invoke>=2.2.0 # Invoke build tool +pyyaml>=6.0.1 +setuptools>=69.0.0 +wheel>=0.41.0 + +# Database links +psycopg[binary, pool] +mysqlclient>=2.2.0 +mariadb>=1.1.8 + +# gunicorn web server +gunicorn>=22.0.0 + +# LDAP required packages +django-auth-ldap # Django integration for ldap auth +python-ldap # LDAP auth support + +# Upgraded python package installer +uv diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index 47968937a5..b5956e2763 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -1,22 +1,220 @@ -# Base python requirements for docker containers - -# Basic package requirements -invoke>=2.2.0 # Invoke build tool -pyyaml>=6.0.1 -setuptools>=69.0.0 -wheel>=0.41.0 - -# Database links -psycopg[binary, pool] -mysqlclient>=2.2.0 -mariadb>=1.1.8 - -# gunicorn web server -gunicorn>=22.0.0 - -# LDAP required packages -django-auth-ldap # Django integration for ldap auth -python-ldap # LDAP auth support - -# Upgraded python package installer -uv +# This file was autogenerated by uv via the following command: +# uv pip compile contrib/container/requirements.in -o contrib/container/requirements.txt --python-version=3.11 --no-strip-extras --generate-hashes +asgiref==3.8.1 \ + --hash=sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47 \ + --hash=sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590 + # via django +django==4.2.11 \ + --hash=sha256:6e6ff3db2d8dd0c986b4eec8554c8e4f919b5c1ff62a5b4390c17aff2ed6e5c4 \ + --hash=sha256:ddc24a0a8280a0430baa37aff11f28574720af05888c62b7cfe71d219f4599d3 + # via django-auth-ldap +django-auth-ldap==4.8.0 \ + --hash=sha256:4b4b944f3c28bce362f33fb6e8db68429ed8fd8f12f0c0c4b1a4344a7ef225ce \ + --hash=sha256:604250938ddc9fda619f247c7a59b0b2f06e53a7d3f46a156f28aa30dd71a738 +gunicorn==22.0.0 \ + --hash=sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9 \ + --hash=sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63 +invoke==2.2.0 \ + --hash=sha256:6ea924cc53d4f78e3d98bc436b08069a03077e6f85ad1ddaa8a116d7dad15820 \ + --hash=sha256:ee6cbb101af1a859c7fe84f2a264c059020b0cb7fe3535f9424300ab568f6bd5 +mariadb==1.1.10 \ + --hash=sha256:03d6284ef713d1cad40146576a4cc2d6cbc1662060f2a0e59b174e1694521698 \ + --hash=sha256:1ce87971c02375236ff8933e6c593c748e7b2f2950b86eabfab4289fd250ea63 \ + --hash=sha256:1d81b22efbaaf4c5bc5e4cc4e2ef3c459538c1a939371089d8c5591d6f26a62e \ + --hash=sha256:29040e426f877ddc45f337c6eb381b6bbab63cc6bf8431a28effe30162142513 \ + --hash=sha256:4521aa721f926946bd71491f872e8babc78fa97755ed2114f5684b77363107cb \ + --hash=sha256:49200378c614984f5ec875481662a49d7c97c2be27970b01b32fa4b7520d4e22 \ + --hash=sha256:5d652117e2fdf12b9723e7452a05fce9e6ccbae6ea48871b21a3a8fde259dc48 \ + --hash=sha256:8c8c6b27486b0e1772a23002c702b5fd244eecf9f05633dd6cb345fc26755a20 \ + --hash=sha256:a332893e3ef7ceb7970ab4bd7c844bcb4bd68a051ca51313566f9808d7411f2d \ + --hash=sha256:d7b09ec4abd02ed235257feb769f90cd4066e8f536b55b92f5166103d5b66a63 \ + --hash=sha256:dff8b28ce4044574870d7bdd2d9f9f5da8e5f95a7ff6d226185db733060d1a93 +mysqlclient==2.2.4 \ + --hash=sha256:329e4eec086a2336fe3541f1ce095d87a6f169d1cc8ba7b04ac68bcb234c9711 \ + --hash=sha256:33bc9fb3464e7d7c10b1eaf7336c5ff8f2a3d3b88bab432116ad2490beb3bf41 \ + --hash=sha256:3c318755e06df599338dad7625f884b8a71fcf322a9939ef78c9b3db93e1de7a \ + --hash=sha256:4e80dcad884dd6e14949ac6daf769123223a52a6805345608bf49cdaf7bc8b3a \ + --hash=sha256:9d3310295cb682232cadc28abd172f406c718b9ada41d2371259098ae37779d3 \ + --hash=sha256:9d4c015480c4a6b2b1602eccd9846103fc70606244788d04aa14b31c4bd1f0e2 \ + --hash=sha256:ac44777eab0a66c14cb0d38965572f762e193ec2e5c0723bcd11319cc5b693c5 \ + --hash=sha256:d43987bb9626096a302ca6ddcdd81feaeca65ced1d5fe892a6a66b808326aa54 \ + --hash=sha256:e1ebe3f41d152d7cb7c265349fdb7f1eca86ccb0ca24a90036cde48e00ceb2ab +packaging==24.0 \ + --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ + --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 + # via + # gunicorn + # mariadb +psycopg[binary, pool]==3.1.18 \ + --hash=sha256:31144d3fb4c17d78094d9e579826f047d4af1da6a10427d91dfcfb6ecdf6f12b \ + --hash=sha256:4d5a0a5a8590906daa58ebd5f3cfc34091377354a1acced269dd10faf55da60e +psycopg-binary==3.1.18 \ + --hash=sha256:02bd4da45d5ee9941432e2e9bf36fa71a3ac21c6536fe7366d1bd3dd70d6b1e7 \ + --hash=sha256:0f68ac2364a50d4cf9bb803b4341e83678668f1881a253e1224574921c69868c \ + --hash=sha256:13bcd3742112446037d15e360b27a03af4b5afcf767f5ee374ef8f5dd7571b31 \ + --hash=sha256:1729d0e3dfe2546d823841eb7a3d003144189d6f5e138ee63e5227f8b75276a5 \ + --hash=sha256:1859aeb2133f5ecdd9cbcee155f5e38699afc06a365f903b1512c765fd8d457e \ + --hash=sha256:1c9b6bd7fb5c6638cb32469674707649b526acfe786ba6d5a78ca4293d87bae4 \ + --hash=sha256:247474af262bdd5559ee6e669926c4f23e9cf53dae2d34c4d991723c72196404 \ + --hash=sha256:258d2f0cb45e4574f8b2fe7c6d0a0e2eb58903a4fd1fbaf60954fba82d595ab7 \ + --hash=sha256:2e2484ae835dedc80cdc7f1b1a939377dc967fed862262cfd097aa9f50cade46 \ + --hash=sha256:320047e3d3554b857e16c2b6b615a85e0db6a02426f4d203a4594a2f125dfe57 \ + --hash=sha256:39242546383f6b97032de7af30edb483d237a0616f6050512eee7b218a2aa8ee \ + --hash=sha256:3c2b039ae0c45eee4cd85300ef802c0f97d0afc78350946a5d0ec77dd2d7e834 \ + --hash=sha256:3c7afcd6f1d55992f26d9ff7b0bd4ee6b475eb43aa3f054d67d32e09f18b0065 \ + --hash=sha256:3e4b0bb91da6f2238dbd4fbb4afc40dfb4f045bb611b92fce4d381b26413c686 \ + --hash=sha256:3e7ce4d988112ca6c75765c7f24c83bdc476a6a5ce00878df6c140ca32c3e16d \ + --hash=sha256:4085f56a8d4fc8b455e8f44380705c7795be5317419aa5f8214f315e4205d804 \ + --hash=sha256:4575da95fc441244a0e2ebaf33a2b2f74164603341d2046b5cde0a9aa86aa7e2 \ + --hash=sha256:489aa4fe5a0b653b68341e9e44af247dedbbc655326854aa34c163ef1bcb3143 \ + --hash=sha256:4e4de16a637ec190cbee82e0c2dc4860fed17a23a35f7a1e6dc479a5c6876722 \ + --hash=sha256:531381f6647fc267383dca88dbe8a70d0feff433a8e3d0c4939201fea7ae1b82 \ + --hash=sha256:55ff0948457bfa8c0d35c46e3a75193906d1c275538877ba65907fd67aa059ad \ + --hash=sha256:59701118c7d8842e451f1e562d08e8708b3f5d14974eefbce9374badd723c4ae \ + --hash=sha256:5c323103dfa663b88204cf5f028e83c77d7a715f9b6f51d2bbc8184b99ddd90a \ + --hash=sha256:5d6e860edf877d4413e4a807e837d55e3a7c7df701e9d6943c06e460fa6c058f \ + --hash=sha256:639dd78ac09b144b0119076783cb64e1128cc8612243e9701d1503c816750b2e \ + --hash=sha256:6432047b8b24ef97e3fbee1d1593a0faaa9544c7a41a2c67d1f10e7621374c83 \ + --hash=sha256:67284e2e450dc7a9e4d76e78c0bd357dc946334a3d410defaeb2635607f632cd \ + --hash=sha256:6ebecbf2406cd6875bdd2453e31067d1bd8efe96705a9489ef37e93b50dc6f09 \ + --hash=sha256:7121acc783c4e86d2d320a7fb803460fab158a7f0a04c5e8c5d49065118c1e73 \ + --hash=sha256:74e498586b72fb819ca8ea82107747d0cb6e00ae685ea6d1ab3f929318a8ce2d \ + --hash=sha256:780a90bcb69bf27a8b08bc35b958e974cb6ea7a04cdec69e737f66378a344d68 \ + --hash=sha256:7ac1785d67241d5074f8086705fa68e046becea27964267ab3abd392481d7773 \ + --hash=sha256:812726266ab96de681f2c7dbd6b734d327f493a78357fcc16b2ac86ff4f4e080 \ + --hash=sha256:824a1bfd0db96cc6bef2d1e52d9e0963f5bf653dd5bc3ab519a38f5e6f21c299 \ + --hash=sha256:87dd9154b757a5fbf6d590f6f6ea75f4ad7b764a813ae04b1d91a70713f414a1 \ + --hash=sha256:887f8d856c91510148be942c7acd702ccf761a05f59f8abc123c22ab77b5a16c \ + --hash=sha256:888a72c2aca4316ca6d4a619291b805677bae99bba2f6e31a3c18424a48c7e4d \ + --hash=sha256:8f54978c4b646dec77fefd8485fa82ec1a87807f334004372af1aaa6de9539a5 \ + --hash=sha256:91074f78a9f890af5f2c786691575b6b93a4967ad6b8c5a90101f7b8c1a91d9c \ + --hash=sha256:9d684227ef8212e27da5f2aff9d4d303cc30b27ac1702d4f6881935549486dd5 \ + --hash=sha256:9e24e7b6a68a51cc3b162d0339ae4e1263b253e887987d5c759652f5692b5efe \ + --hash=sha256:9ffcbbd389e486d3fd83d30107bbf8b27845a295051ccabde240f235d04ed921 \ + --hash=sha256:a87e9eeb80ce8ec8c2783f29bce9a50bbcd2e2342a340f159c3326bf4697afa1 \ + --hash=sha256:ad35ac7fd989184bf4d38a87decfb5a262b419e8ba8dcaeec97848817412c64a \ + --hash=sha256:b15e3653c82384b043d820fc637199b5c6a36b37fa4a4943e0652785bb2bad5d \ + --hash=sha256:b293e01057e63c3ac0002aa132a1071ce0fdb13b9ee2b6b45d3abdb3525c597d \ + --hash=sha256:b2f7f95746efd1be2dc240248cc157f4315db3fd09fef2adfcc2a76e24aa5741 \ + --hash=sha256:bd27f713f2e5ef3fd6796e66c1a5203a27a30ecb847be27a78e1df8a9a5ae68c \ + --hash=sha256:c38a4796abf7380f83b1653c2711cb2449dd0b2e5aca1caa75447d6fa5179c69 \ + --hash=sha256:c76659ae29a84f2c14f56aad305dd00eb685bd88f8c0a3281a9a4bc6bd7d2aa7 \ + --hash=sha256:c84a0174109f329eeda169004c7b7ca2e884a6305acab4a39600be67f915ed38 \ + --hash=sha256:cd2a9f7f0d4dacc5b9ce7f0e767ae6cc64153264151f50698898c42cabffec0c \ + --hash=sha256:d322ba72cde4ca2eefc2196dad9ad7e52451acd2f04e3688d590290625d0c970 \ + --hash=sha256:d4422af5232699f14b7266a754da49dc9bcd45eba244cf3812307934cd5d6679 \ + --hash=sha256:d46ae44d66bf6058a812467f6ae84e4e157dee281bfb1cfaeca07dee07452e85 \ + --hash=sha256:da917f6df8c6b2002043193cb0d74cc173b3af7eb5800ad69c4e1fbac2a71c30 \ + --hash=sha256:dea4a59da7850192fdead9da888e6b96166e90608cf39e17b503f45826b16f84 \ + --hash=sha256:e05f6825f8db4428782135e6986fec79b139210398f3710ed4aa6ef41473c008 \ + --hash=sha256:e1cf59e0bb12e031a48bb628aae32df3d0c98fd6c759cb89f464b1047f0ca9c8 \ + --hash=sha256:e252d66276c992319ed6cd69a3ffa17538943954075051e992143ccbf6dc3d3e \ + --hash=sha256:e262398e5d51563093edf30612cd1e20fedd932ad0994697d7781ca4880cdc3d \ + --hash=sha256:e28ff8f3de7b56588c2a398dc135fd9f157d12c612bd3daa7e6ba9872337f6f5 \ + --hash=sha256:eea5f14933177ffe5c40b200f04f814258cc14b14a71024ad109f308e8bad414 \ + --hash=sha256:f876ebbf92db70125f6375f91ab4bc6b27648aa68f90d661b1fc5affb4c9731c \ + --hash=sha256:f8ff3bc08b43f36fdc24fedb86d42749298a458c4724fb588c4d76823ac39f54 + # via psycopg +psycopg-pool==3.2.1 \ + --hash=sha256:060b551d1b97a8d358c668be58b637780b884de14d861f4f5ecc48b7563aafb7 \ + --hash=sha256:6509a75c073590952915eddbba7ce8b8332a440a31e77bba69561483492829ad + # via psycopg +pyasn1==0.6.0 \ + --hash=sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c \ + --hash=sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473 + # via + # pyasn1-modules + # python-ldap +pyasn1-modules==0.4.0 \ + --hash=sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6 \ + --hash=sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b + # via python-ldap +python-ldap==3.4.4 \ + --hash=sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828 + # via django-auth-ldap +pyyaml==6.0.1 \ + --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ + --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ + --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f +setuptools==69.5.1 \ + --hash=sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987 \ + --hash=sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32 +sqlparse==0.5.0 \ + --hash=sha256:714d0a4932c059d16189f58ef5411ec2287a4360f17cdd0edd2d09d4c5087c93 \ + --hash=sha256:c204494cd97479d0e39f28c93d46c0b2d5959c7b9ab904762ea6c7af211c8663 + # via django +typing-extensions==4.11.0 \ + --hash=sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0 \ + --hash=sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a + # via + # psycopg + # psycopg-pool +uv==0.1.38 \ + --hash=sha256:03242a734a572733f2b9a5dbb94517e918fe26fc01114b7c51d12296dfbb8f8b \ + --hash=sha256:067af2d986329db4fa3c7373017d49f0e16ddff23e483b7e5bc3a5a18ce08ea6 \ + --hash=sha256:0937ad16ae0e0b6bb6dd3c386f8fb33141ad08d1762eaacffb4d2b27fb466a17 \ + --hash=sha256:0e1d64ac437b0a14fbcec55b1c3f162fa24860711e0d855fcd9c672b149a122a \ + --hash=sha256:1be7aa46936c0351ccb1400ea95e5381b3f05fef772fa3b9f23af728cc175dea \ + --hash=sha256:309e73a3ec3a5a536a3efaf434270fc94b483069f1425765165c1c9d786c27fd \ + --hash=sha256:4251f9771d392d7badc1e5fb934b397b12ca00fef9d955207ade169cc1f7e872 \ + --hash=sha256:43772e7589f70e954b1ae29230e575ef9e4d8d769138a94dfa5ae7eaf1e26ac5 \ + --hash=sha256:4a6024256d38b77151e32876be9fcb99cf75df7a86b26e0161cc202bed558adf \ + --hash=sha256:5a98d6aacd4b57b7e00daf154919e7c9206fefdf40bd28cfb13efe0e0324d491 \ + --hash=sha256:8de6dbd8f348ee90af044f4cc7b6650521d25ba2d20a813c1e157a3f90069dd9 \ + --hash=sha256:9133e24db9bdd4f412eab69586d03294419825432a9a27ee1b510a4c01eb7b0b \ + --hash=sha256:92f65b6e4e5c8126501785af3629dc537d7c82caa56ac9336a86929c73d0e138 \ + --hash=sha256:afd85029923e712b6b2c45ddc1680c785392220876c766521e45778db3f71f8e \ + --hash=sha256:b0b15e51a0f8240969bc412ed0dd60cfe3f664b30173139ef263d71c596d631f \ + --hash=sha256:ea44c07605d1359a7d82bf42706dd86d341f15f4ca2e1f36e51626a7111c2ad5 \ + --hash=sha256:f87c9711493c53d32012a96b49c4d53aabdf7ed666cbf2c3fb55dd402a6b31a8 +wheel==0.43.0 \ + --hash=sha256:465ef92c69fa5c5da2d1cf8ac40559a8c940886afcef87dcf14b9470862f1d85 \ + --hash=sha256:55c570405f142630c6b9f72fe09d9b67cf1477fcf543ae5b8dcb1f5b7377da81 diff --git a/contrib/dev_reqs/requirements.in b/contrib/dev_reqs/requirements.in new file mode 100644 index 0000000000..5075751c85 --- /dev/null +++ b/contrib/dev_reqs/requirements.in @@ -0,0 +1,4 @@ +# Packages needed for CI/packages +requests==2.32.2 +pyyaml==6.0.1 +jc==1.25.2 diff --git a/.github/requirements.txt b/contrib/dev_reqs/requirements.txt similarity index 70% rename from .github/requirements.txt rename to contrib/dev_reqs/requirements.txt index 73856016a7..c4099a325e 100644 --- a/.github/requirements.txt +++ b/contrib/dev_reqs/requirements.txt @@ -1,5 +1,5 @@ # This file was autogenerated by uv via the following command: -# uv pip compile .github/requirements.in -o .github/requirements.txt --python-version=3.9 --no-strip-extras --generate-hashes +# uv pip compile contrib/dev_reqs/requirements.in -o contrib/dev_reqs/requirements.txt --python-version=3.9 --no-strip-extras --generate-hashes certifi==2024.2.2 \ --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 @@ -100,6 +100,13 @@ idna==3.7 \ --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 # via requests +jc==1.25.2 \ + --hash=sha256:26e412a65a478f9da3097653db6277f915cfae5c0f0a3f42026b405936abd358 \ + --hash=sha256:97ada193495f79550f06fe0cbfb119ff470bcca57c1cc593a5cdb0008720e0b3 +pygments==2.17.2 \ + --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \ + --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367 + # via jc pyyaml==6.0.1 \ --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ @@ -152,10 +159,70 @@ pyyaml==6.0.1 \ --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f -requests==2.31.0 \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +requests==2.32.2 \ + --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ + --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c +ruamel-yaml==0.18.6 \ + --hash=sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636 \ + --hash=sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b + # via jc +ruamel-yaml-clib==0.2.8 \ + --hash=sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d \ + --hash=sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001 \ + --hash=sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462 \ + --hash=sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9 \ + --hash=sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe \ + --hash=sha256:1758ce7d8e1a29d23de54a16ae867abd370f01b5a69e1a3ba75223eaa3ca1a1b \ + --hash=sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b \ + --hash=sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615 \ + --hash=sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62 \ + --hash=sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15 \ + --hash=sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b \ + --hash=sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1 \ + --hash=sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9 \ + --hash=sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675 \ + --hash=sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899 \ + --hash=sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7 \ + --hash=sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7 \ + --hash=sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312 \ + --hash=sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa \ + --hash=sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91 \ + --hash=sha256:75e1ed13e1f9de23c5607fe6bd1aeaae21e523b32d83bb33918245361e9cc51b \ + --hash=sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6 \ + --hash=sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3 \ + --hash=sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334 \ + --hash=sha256:84b554931e932c46f94ab306913ad7e11bba988104c5cff26d90d03f68258cd5 \ + --hash=sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3 \ + --hash=sha256:955eae71ac26c1ab35924203fda6220f84dce57d6d7884f189743e2abe3a9fbe \ + --hash=sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c \ + --hash=sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed \ + --hash=sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337 \ + --hash=sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880 \ + --hash=sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f \ + --hash=sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d \ + --hash=sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248 \ + --hash=sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d \ + --hash=sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf \ + --hash=sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512 \ + --hash=sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069 \ + --hash=sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb \ + --hash=sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942 \ + --hash=sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d \ + --hash=sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31 \ + --hash=sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92 \ + --hash=sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5 \ + --hash=sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28 \ + --hash=sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d \ + --hash=sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1 \ + --hash=sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2 \ + --hash=sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875 \ + --hash=sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412 + # via ruamel-yaml urllib3==2.2.1 \ --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 # via requests +xmltodict==0.13.0 \ + --hash=sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56 \ + --hash=sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852 + # via jc diff --git a/contrib/packager.io/functions.sh b/contrib/packager.io/functions.sh index 5b74029b9d..bb236be77d 100755 --- a/contrib/packager.io/functions.sh +++ b/contrib/packager.io/functions.sh @@ -44,6 +44,18 @@ function detect_ip() { echo "IP address is ${INVENTREE_IP}" } +function detect_python() { + # Detect if there is already a python version installed in /opt/inventree/env/lib + if test -f "${APP_HOME}/env/bin/python"; then + echo "# Python environment already present" + # Extract earliest python version initialised from /opt/inventree/env/lib + SETUP_PYTHON=$(ls -1 ${APP_HOME}/env/bin/python* | sort | head -n 1) + echo "# Found earliest version: ${SETUP_PYTHON}" + else + echo "# No python environment found - using ${SETUP_PYTHON}" + fi +} + function get_env() { envname=$1 @@ -90,7 +102,7 @@ function detect_envs() { echo "# Using existing config file: ${INVENTREE_CONFIG_FILE}" # Install parser - pip install jc==1.25.2 -q + pip install --require-hashes -r ${APP_HOME}/contrib/dev_reqs/requirements.txt -q # Load config local CONF=$(cat ${INVENTREE_CONFIG_FILE} | jc --yaml) @@ -163,12 +175,20 @@ function create_initscripts() { sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && ${SETUP_PYTHON} -m venv env" sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && env/bin/pip install invoke wheel" + # Check INSTALLER_EXTRA exists and load it + if test -f "${APP_HOME}/INSTALLER_EXTRA"; then + echo "# Loading extra packages from INSTALLER_EXTRA" + source ${APP_HOME}/INSTALLER_EXTRA + fi + if [ -n "${SETUP_EXTRA_PIP}" ]; then echo "# Installing extra pip packages" if [ -n "${SETUP_DEBUG}" ]; then echo "# Extra pip packages: ${SETUP_EXTRA_PIP}" fi sudo -u ${APP_USER} --preserve-env=$SETUP_ENVS bash -c "cd ${APP_HOME} && env/bin/pip install ${SETUP_EXTRA_PIP}" + # Write extra packages to INSTALLER_EXTRA + echo "SETUP_EXTRA_PIP='${SETUP_EXTRA_PIP}'" >>${APP_HOME}/INSTALLER_EXTRA fi fi @@ -283,6 +303,20 @@ function set_env() { chown ${APP_USER}:${APP_GROUP} ${DATA_DIR} ${INVENTREE_CONFIG_FILE} } +function set_site() { + # Ensure IP is known + if [ -z "${INVENTREE_IP}" ]; then + echo "# No IP address found - skipping" + return + fi + + # Check if INVENTREE_SITE_URL in inventree config + if [ -z "$(inventree config:get INVENTREE_SITE_URL)" ]; then + echo "# Setting up InvenTree site URL" + inventree config:set INVENTREE_SITE_URL=http://${INVENTREE_IP} + fi +} + function final_message() { echo -e "####################################################################################" echo -e "This InvenTree install uses nginx, the settings for the webserver can be found in" diff --git a/contrib/packager.io/postinstall.sh b/contrib/packager.io/postinstall.sh index 03230b955a..89c88833b1 100755 --- a/contrib/packager.io/postinstall.sh +++ b/contrib/packager.io/postinstall.sh @@ -33,6 +33,7 @@ detect_envs detect_docker detect_initcmd detect_ip +detect_python # create processes create_initscripts @@ -45,6 +46,7 @@ update_or_install if [ "${SETUP_CONF_LOADED}" = "true" ]; then set_env fi +set_site start_inventree # show info diff --git a/docs/.gitignore b/docs/.gitignore index ea8649cfa3..3a6bc5786f 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -13,6 +13,10 @@ site/ # Generated API schema files docs/api/schema/*.yml +# Temporary cache files +url_cache.txt +invoke-commands.txt + # Temp files releases.json versions.json diff --git a/docs/README.md b/docs/README.md index 578afc13e8..99f221794f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -12,7 +12,7 @@ Run the following commands from the top-level project directory: ``` $ git clone https://github.com/inventree/inventree -$ pip install -r docs/requirements.txt +$ pip install --require-hashes -r docs/requirements.txt ``` ## Serve Locally diff --git a/docs/docs/assets/images/report/add_report_template.png b/docs/docs/assets/images/report/add_report_template.png deleted file mode 100644 index 3268a7ab26..0000000000 Binary files a/docs/docs/assets/images/report/add_report_template.png and /dev/null differ diff --git a/docs/docs/assets/images/report/report_template_admin.png b/docs/docs/assets/images/report/report_template_admin.png new file mode 100644 index 0000000000..58512fb5e7 Binary files /dev/null and b/docs/docs/assets/images/report/report_template_admin.png differ diff --git a/docs/docs/build/build.md b/docs/docs/build/build.md index 5c889cc808..cf571be503 100644 --- a/docs/docs/build/build.md +++ b/docs/docs/build/build.md @@ -79,6 +79,18 @@ Each *Build Order* has an associated *Status* flag, which indicates the state of | `Cancelled` | Build has been cancelled | | `Completed` | Build has been completed | +**Source Code** + +Refer to the source code for the Build Order status codes: + +::: build.status_codes.BuildStatus + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + ### Stock Allocations When a *Build Order* is created, we then have the ability to *allocate* stock items against that build order. The particular parts we need to allocate against the build are specified by the BOM for the part we are assembling. diff --git a/docs/docs/develop/contributing.md b/docs/docs/develop/contributing.md index 06df11fabb..4563487a04 100644 --- a/docs/docs/develop/contributing.md +++ b/docs/docs/develop/contributing.md @@ -22,9 +22,9 @@ To setup a development environment using [docker](../start/docker.md), run the f ```bash git clone https://github.com/inventree/InvenTree.git && cd InvenTree -docker compose run inventree-dev-server invoke install -docker compose run inventree-dev-server invoke setup-test --dev -docker compose up -d +docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run --rm inventree-dev-server invoke install +docker compose --project-directory . -f contrib/container/dev-docker-compose.yml run --rm inventree-dev-server invoke setup-test --dev +docker compose --project-directory . -f contrib/container/dev-docker-compose.yml up -d ``` ### Bare Metal @@ -54,13 +54,23 @@ invoke setup-dev InvenTree roughly follow the [GitLab flow](https://docs.gitlab.com/ee/topics/gitlab_flow.html) branching style, to allow simple management of multiple tagged releases, short-lived branches, and development on the main branch. +There are nominally 5 active branches: +- `master` - The main development branch +- `stable` - The latest stable release +- `l10n` - Translation branch: Source to Crowdin +- `l10_crowdin` - Translation branch: Source from Crowdin +- `y.y.x` - Release branch for the currently supported version (e.g. `0.5.x`) + +All other branches are removed periodically by maintainers or core team members. This includes old release branches. +Do not use them as base for feature development or forks as patches from them might not be accepted without rebasing. + ### Version Numbering InvenTree version numbering follows the [semantic versioning](https://semver.org/) specification. -### Master Branch +### Main Development Branch -The HEAD of the "main" or "master" branch of InvenTree represents the current "latest" state of code development. +The HEAD of the "master" branch of InvenTree represents the current "latest" state of code development. - All feature branches are merged into master - All bug fixes are merged into master @@ -73,7 +83,6 @@ Feature branches should be branched *from* the *master* branch. - One major feature per branch / pull request - Feature pull requests are merged back *into* the master branch -- Features *may* also be merged into a release candidate branch ### Stable Branch @@ -82,21 +91,28 @@ The HEAD of the "stable" branch represents the latest stable release code. - Versioned releases are merged into the "stable" branch - Bug fix branches are made *from* the "stable" branch -#### Release Candidate Branches -- Release candidate branches are made from master, and merged into stable. -- RC branches are targeted at a major/minor version e.g. "0.5" -- When a release candidate branch is merged into *stable*, the release is tagged - -#### Bugfix Branches +### Bugfix Branches - If a bug is discovered in a tagged release version of InvenTree, a "bugfix" or "hotfix" branch should be made *from* that tagged release - When approved, the branch is merged back *into* stable, with an incremented PATCH number (e.g. 0.4.1 -> 0.4.2) - The bugfix *must* also be cherry picked into the *master* branch. +- A bugfix *might* also be backported from *master* to the *stable* branch automatically if marked with the `backport` label. + +### Translation Branches + +Crowdin is used for web-based translation management. The handling of files is fully automated, the `l10n` and `l10_crowdin` branches are used to manage the translation process and are not meant to be touched manually by anyone. + +The translation process is as follows: +1. Commits to `master` trigger CI by GitHub Actions +2. Translation source files are created and automatically pushed to the `l10n` branch - this is the source branch for Crowdin +3. Crowdin picks up on the new source files and makes them available for translation +4. Translations made in Crowdin are automatically pushed back to the `l10_crowdin` branch by Crowdin once they are approved +5. The `l10_crowdin` branch is merged back into `master` by a maintainer periodically ## API versioning -The [API version](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/InvenTree/api_version.py) needs to be bumped every time when the API is changed. +The [API version]({{ sourcefile("src/backend/InvenTree/InvenTree/api_version.py") }}) needs to be bumped every time when the API is changed. ## Environment diff --git a/docs/docs/develop/devcontainer.md b/docs/docs/develop/devcontainer.md index 093e36b092..f9e9d2a62f 100644 --- a/docs/docs/develop/devcontainer.md +++ b/docs/docs/develop/devcontainer.md @@ -18,12 +18,13 @@ You need to make sure that you have the following tools installed before continu #### Docker Containers -The InvenTree devcontainer setup will install two docker containers: +The InvenTree devcontainer setup will install the following docker containers: | Container | Description | | --- | --- | +| inventree | InvenTree host server | | db | InvenTree database (postgresql) | -| inventree | InvenTree server | +| redis | Redis server for caching | #### Setup/Installation @@ -119,3 +120,9 @@ If you are running a devcontainer in Windows, you may experience some performanc For a significant improvement in performance, the source code should be installed into the **WSL 2** filesystem (not on your "Windows" filesystem). This will greatly improve file access performance, and also make the devcontainer much more responsive to file system changes. You can also refer to the [Improve disk performance guide](https://code.visualstudio.com/remote/advancedcontainers/improve-performance) for more information. + +### Redis Caching + +The devcontainer setup provides a [redis](https://redis.io/) container which can be used for managing global cache. By default this is disabled, but it can be easily enabled for testing or developing with the [redis cache](../start/config.md#caching) enabled. + +To enable the cache, locate the InvenTree configuration file (`./dev/config.yaml`) and set the `cache.enabled` setting to `True`. diff --git a/docs/docs/extend/how_to_plugin.md b/docs/docs/extend/how_to_plugin.md index 79803daebb..22b60933f6 100644 --- a/docs/docs/extend/how_to_plugin.md +++ b/docs/docs/extend/how_to_plugin.md @@ -149,7 +149,7 @@ class SampleActionPlugin(ActionMixin, InvenTreePlugin): # metadata AUTHOR = "Sample Author" DESCRIPTION = "A very basic plugin with one mixin" - PUBLISH_DATE = "22.02.2222" + PUBLISH_DATE = "2222-02-22" VERSION = "1.2.3" # We recommend semver and increase the major version with each new major release of InvenTree WEBSITE = "https://example.com/" LICENSE = "MIT" # use what you want - OSI approved is ♥ diff --git a/docs/docs/extend/plugins.md b/docs/docs/extend/plugins.md index 2c298492f8..37b17238ea 100644 --- a/docs/docs/extend/plugins.md +++ b/docs/docs/extend/plugins.md @@ -9,14 +9,14 @@ The InvenTree server code supports an extensible plugin architecture, allowing c Plugins can be added from multiple sources: - Plugins can be installed in InvenTrees venv via PIP (python package manager) -- Custom plugins should be placed in the directory `./src/backend/InvenTree/plugins`. +- Custom plugins should be placed in the directory `./data/plugins`. - InvenTree built-in plugins are located in the directory `./src/backend/InvenTree/plugin/builtin`. For further information, read more about [installing plugins](./plugins/install.md). ### Plugin Base Class -Custom plugins must inherit from the [InvenTreePlugin class](https://github.com/inventree/InvenTree/blob/2d1776a151721d65d0ae007049d358085b2fcfd5/InvenTree/plugin/plugin.py#L204). Any plugins installed via the methods outlined above will be "discovered" when the InvenTree server launches. +Custom plugins must inherit from the [InvenTreePlugin class]({{ sourcefile("src/backend/InvenTree/plugin/plugin.py") }}). Any plugins installed via the methods outlined above will be "discovered" when the InvenTree server launches. !!! warning "Namechange" The name of the base class was changed with `0.7.0` from `IntegrationPluginBase` to `InvenTreePlugin`. While the old name is still available till `0.8.0` we strongly suggest upgrading your plugins. Deprecation warnings are raised if the old name is used. @@ -28,7 +28,7 @@ Please read all release notes and watch out for warnings - we generally provide #### Plugins -General classes and mechanisms are provided under the `plugin` [namespaces](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/__init__.py). These include: +General classes and mechanisms are provided under the `plugin` [namespaces]({{ sourcefile("src/backend/InvenTree/plugin/__init__.py") }}). These include: ```python # Management objects @@ -44,7 +44,7 @@ MixinNotImplementedError # Is raised if a mixin was not implemented (core mec #### Mixins -Mixins are split up internally to keep the source tree clean and enable better testing separation. All public APIs that should be used are exposed under `plugin.mixins`. These include all built-in mixins and notification methods. An up-to-date reference can be found in the source code (current master can be [found here](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/mixins/__init__.py)). +Mixins are split up internally to keep the source tree clean and enable better testing separation. All public APIs that should be used are exposed under `plugin.mixins`. These include all built-in mixins and notification methods. An up-to-date reference can be found in the source code [can be found here]({{ sourcefile("src/backend/InvenTree/plugin/mixins/__init__.py") }}). #### Models and other internal InvenTree APIs @@ -72,7 +72,7 @@ MIN_VERSION = None # Lowest InvenTree version number that is supported by the p MAX_VERSION = None # Highest InvenTree version number that is supported by the plugin ``` -Refer to the [sample plugins](https://github.com/inventree/InvenTree/tree/master/src/backend/InvenTree/plugin/samples) for further examples. +Refer to the [sample plugins]({{ sourcedir("src/backend/InvenTree/plugin/samples") }}) for further examples. ### Plugin Config diff --git a/docs/docs/extend/plugins/action.md b/docs/docs/extend/plugins/action.md index e38bed7dc0..afb630aeee 100644 --- a/docs/docs/extend/plugins/action.md +++ b/docs/docs/extend/plugins/action.md @@ -15,4 +15,14 @@ POST { } ``` -For an example of a very simple action plugin, refer to `/src/backend/InvenTree/plugin/samples/integratoni/simpleactionplugin.py` +### Sample Plugin + +A sample action plugin is provided in the `InvenTree` source code, which can be used as a template for creating custom action plugins: + +::: plugin.samples.integration.simpleactionplugin.SimpleActionPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/extend/plugins/api.md b/docs/docs/extend/plugins/api.md index 1b9638cb62..e478acbc06 100644 --- a/docs/docs/extend/plugins/api.md +++ b/docs/docs/extend/plugins/api.md @@ -5,3 +5,15 @@ title: Schedule Mixin ## APICallMixin The APICallMixin class provides basic functionality for integration with an external API. + +### Sample Plugin + +The following example demonstrates how to use the `APICallMixin` class to make a simple API call: + +::: plugin.samples.integration.api_caller.SampleApiCallerPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/extend/plugins/barcode.md b/docs/docs/extend/plugins/barcode.md index 33017c1cd9..51f953b0cd 100644 --- a/docs/docs/extend/plugins/barcode.md +++ b/docs/docs/extend/plugins/barcode.md @@ -2,11 +2,11 @@ title: Barcode Mixin --- -### Barcode Plugins +## Barcode Plugins InvenTree supports decoding of arbitrary barcode data via a **Barcode Plugin** interface. Barcode data POSTed to the `/api/barcode/` endpoint will be supplied to all loaded barcode plugins, and the first plugin to successfully interpret the barcode data will return a response to the client. -InvenTree can generate native QR codes to represent database objects (e.g. a single StockItem). This barcode can then be used to perform quick lookup of a stock item or location in the database. A client application (for example the InvenTree mobile app) scans a barcode, and sends the barcode data to the InvenTree server. The server then uses the **InvenTreeBarcodePlugin** (found at `/src/backend/InvenTree/plugins/barcode/inventree.py`) to decode the supplied barcode data. +InvenTree can generate native QR codes to represent database objects (e.g. a single StockItem). This barcode can then be used to perform quick lookup of a stock item or location in the database. A client application (for example the InvenTree mobile app) scans a barcode, and sends the barcode data to the InvenTree server. The server then uses the **InvenTreeBarcodePlugin** (found at `src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py`) to decode the supplied barcode data. Any third-party barcodes can be decoded by writing a matching plugin to decode the barcode data. These plugins could then perform a server-side action or render a JSON response back to the client for further action. @@ -24,7 +24,21 @@ POST { } ``` -### Example +### Builtin Plugin + +The InvenTree server includes a builtin barcode plugin which can decode QR codes generated by the server. This plugin is enabled by default. + +::: plugin.builtin.barcodes.inventree_barcode.InvenTreeInternalBarcodePlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + + +### Example Plugin + Please find below a very simple example that is executed each time a barcode is scanned. ```python diff --git a/docs/docs/extend/plugins/currency.md b/docs/docs/extend/plugins/currency.md index b96178379d..0237c7cddf 100644 --- a/docs/docs/extend/plugins/currency.md +++ b/docs/docs/extend/plugins/currency.md @@ -6,7 +6,24 @@ title: Currency Exchange Mixin The `CurrencyExchangeMixin` class enabled plugins to provide custom backends for updating currency exchange rate information. -Any implementing classes must provide the `update_exchange_rates` method. A simple example is shown below (with fake data). +Any implementing classes must provide the `update_exchange_rates` method. + +### Builtin Plugin + +The default builtin plugin for handling currency exchange rates is the `InvenTreeCurrencyExchangePlugin` class. + +::: plugin.builtin.integration.currency_exchange.InvenTreeCurrencyExchange + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + + +### Sample Plugin + +A simple example is shown below (with fake data). ```python diff --git a/docs/docs/extend/plugins/event.md b/docs/docs/extend/plugins/event.md index 4fba5aa956..96a41ca3c5 100644 --- a/docs/docs/extend/plugins/event.md +++ b/docs/docs/extend/plugins/event.md @@ -15,56 +15,34 @@ When a certain (server-side) event occurs, the background worker passes the even {% include 'img.html' %} {% endwith %} -### Example (all events) +### Sample Plugin - All events Implementing classes must at least provide a `process_event` function: -```python -class EventPlugin(EventMixin, InvenTreePlugin): - """ - A simple example plugin which responds to events on the InvenTree server. +::: plugin.samples.event.event_sample.EventPluginSample + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] - This example simply prints out the event information. - A more complex plugin could respond to specific events however it wanted. - """ - - NAME = "EventPlugin" - SLUG = "event" - TITLE = "Triggered Events" - - def process_event(self, event, *args, **kwargs): - print(f"Processing triggered event: '{event}'") -``` - -### Example (specific events) +### Sample Plugin - Specific Events If you want to process just some specific events, you can also implement the `wants_process_event` function to decide if you want to process this event or not. This function will be executed synchronously, so be aware that it should contain simple logic. Overall this function can reduce the workload on the background workers significantly since less events are queued to be processed. -```python -class EventPlugin(EventMixin, InvenTreePlugin): - """ - A simple example plugin which responds to 'salesordershipment.completed' event on the InvenTree server. +::: plugin.samples.event.filtered_event_sample.FilteredEventPluginSample + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] - This example simply prints out the event information. - A more complex plugin can run enhanced logic on this event. - """ - NAME = "EventPlugin" - SLUG = "event" - TITLE = "Triggered Events" - - def wants_process_event(self, event): - """Here you can decide if this event should be send to `process_event` or not.""" - return event == "salesordershipment.completed" - - def process_event(self, event, *args, **kwargs): - """Here you can run you'r specific logic.""" - print(f"Sales order was completely shipped: '{args}' '{kwargs}'") -``` - -### Events +## Events Events are passed through using a string identifier, e.g. `build.completed` diff --git a/docs/docs/extend/plugins/install.md b/docs/docs/extend/plugins/install.md index 9588d3a96e..24cb1cf545 100644 --- a/docs/docs/extend/plugins/install.md +++ b/docs/docs/extend/plugins/install.md @@ -74,10 +74,10 @@ Admin users can install plugins directly from the web interface, via the "Plugin #### Local Directory -Custom plugins can be placed in the `src/InvenTree/plugins/` directory, where they will be automatically discovered. This can be useful for developing and testing plugins, but can prove more difficult in production (e.g. when using Docker). +Custom plugins can be placed in the `data/plugins/` directory, where they will be automatically discovered. This can be useful for developing and testing plugins, but can prove more difficult in production (e.g. when using Docker). !!! info "Git Tracking" - The `src/backend/InvenTree/plugins/` directory is excluded from Git version tracking - any plugin files here will be hidden from Git + The `data/plugins/` directory is excluded from Git version tracking - any plugin files here will be hidden from Git !!! warning "Not Recommended For Production" Loading plugins via the local *plugins* directory is not recommended for production. If you cannot use PIP installation (above), specify a custom plugin directory (below) or use a [VCS](https://pip.pypa.io/en/stable/topics/vcs-support/) as a plugin install source. diff --git a/docs/docs/extend/plugins/label.md b/docs/docs/extend/plugins/label.md index 72d6579dab..ff33d64e38 100644 --- a/docs/docs/extend/plugins/label.md +++ b/docs/docs/extend/plugins/label.md @@ -172,6 +172,14 @@ InvenTree supplies the `InvenTreeLabelPlugin` out of the box, which generates a The default plugin also features a *DEBUG* mode which generates a raw HTML output, rather than PDF. This can be handy for tracking down any template rendering errors in your labels. +::: plugin.builtin.labels.inventree_label.InvenTreeLabelPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + ### Available Data The *label* data are supplied to the plugin in both `PDF` and `PNG` formats. This provides compatibility with a great range of label printers "out of the box". Conversion to other formats, if required, is left as an exercise for the plugin developer. diff --git a/docs/docs/extend/plugins/locate.md b/docs/docs/extend/plugins/locate.md index 956dbedd7f..c3bac48679 100644 --- a/docs/docs/extend/plugins/locate.md +++ b/docs/docs/extend/plugins/locate.md @@ -28,4 +28,16 @@ If a locate plugin is installed and activated, the [InvenTree mobile app](../../ ### Implementation -Refer to the [InvenTree source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/locate/locate_sample.py) for a simple implementation example. +Refer to the [InvenTree source code]({{ sourcefile("src/backend/InvenTree/plugin/samples/locate/locate_sample.py") }}) for a simple implementation example. + +### Sample Plugin + +A simple example is provided in the InvenTree code base: + +::: plugin.samples.locate.locate_sample.SampleLocatePlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/extend/plugins/panel.md b/docs/docs/extend/plugins/panel.md index 542c4b0afa..f91c175ab1 100644 --- a/docs/docs/extend/plugins/panel.md +++ b/docs/docs/extend/plugins/panel.md @@ -52,6 +52,18 @@ Or to add a template file that will be rendered as javascript code, from the plu Note : see convention for template directory above. +## Sample Plugin + +A sample plugin is provided in the InvenTree code base: + +::: plugin.samples.integration.custom_panel_sample.CustomPanelSample + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + ## Example Implementations Refer to the `CustomPanelSample` example class in the `./plugin/samples/integration/` directory, for a fully worked example of how custom UI panels can be implemented. diff --git a/docs/docs/extend/plugins/report.md b/docs/docs/extend/plugins/report.md index 0e2cdc671e..282c86e4e7 100644 --- a/docs/docs/extend/plugins/report.md +++ b/docs/docs/extend/plugins/report.md @@ -14,48 +14,14 @@ A plugin which implements the ReportMixin mixin can define the `add_report_conte Additionally the `add_label_context` method, allowing custom context data to be added to a label template at time of printing. -### Example +### Sample Plugin -A sample plugin which provides additional context data to the report templates can be found [in the InvenTree source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py): +A sample plugin which provides additional context data to the report templates is available: -```python -"""Sample plugin for extending reporting functionality""" - -import random - -from plugin import InvenTreePlugin -from plugin.mixins import ReportMixin -from report.models import PurchaseOrderReport - - -class SampleReportPlugin(ReportMixin, InvenTreePlugin): - """Sample plugin which provides extra context data to a report""" - - NAME = "Sample Report Plugin" - SLUG = "reportexample" - TITLE = "Sample Report Plugin" - DESCRIPTION = "A sample plugin which provides extra context data to a report" - VERSION = "1.0" - - def some_custom_function(self): - """Some custom function which is not required for the plugin to function""" - return random.randint(0, 100) - - def add_report_context(self, report_instance, model_instance, request, context): - - """Add example content to the report instance""" - - # We can add any extra context data we want to the report - - # Generate a random string of data - context['random_text'] = ''.join(random.choices('abcdefghijklmnopqrstuvwxyz', k=20)) - - # Call a custom method - context['random_int'] = self.some_custom_function() - - # We can also add extra data to the context which is specific to the report type - context['is_purchase_order'] = isinstance(report_instance, PurchaseOrderReport) - - # We can also use the 'request' object to add extra context data - context['request_method'] = request.method -``` +::: plugin.samples.integration.report_plugin_sample.SampleReportPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/extend/plugins/schedule.md b/docs/docs/extend/plugins/schedule.md index a72901b526..d0f28de7e2 100644 --- a/docs/docs/extend/plugins/schedule.md +++ b/docs/docs/extend/plugins/schedule.md @@ -18,45 +18,14 @@ The ScheduleMixin class provides a plugin with the ability to call functions at {% include 'img.html' %} {% endwith %} -### Example +### SamplePlugin An example of a plugin which supports scheduled tasks: -```python -class ScheduledTaskPlugin(ScheduleMixin, SettingsMixin, InvenTreePlugin): - """ - Sample plugin which runs a scheduled task, and provides user configuration. - """ - - NAME = "Scheduled Tasks" - SLUG = 'schedule' - - SCHEDULED_TASKS = { - 'global': { - 'func': 'some_module.function', - 'schedule': 'H', # Run every hour - }, - 'member': { - 'func': 'foo', - 'schedule': 'I', # Minutes - 'minutes': 15, - }, - } - - SETTINGS = { - 'SECRET': { - 'name': 'A secret', - 'description': 'User configurable value', - }, - } - - def foo(self): - """ - This function runs every 15 minutes - """ - secret_value = self.get_setting('SECRET') - print(f"foo - SECRET = {secret_value}) -``` - -!!! info "More Info" - For more information on any of the methods described below, refer to the InvenTree source code. [A working example is available as a starting point](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/integration/scheduled_task.py). +::: plugin.samples.integration.scheduled_task.ScheduledTaskPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/extend/plugins/settings.md b/docs/docs/extend/plugins/settings.md index 178d5b1f92..d094e36537 100644 --- a/docs/docs/extend/plugins/settings.md +++ b/docs/docs/extend/plugins/settings.md @@ -15,7 +15,7 @@ The dict must be formatted similar to the following sample that shows how to use Take a look at the settings defined in `InvenTree.common.models.InvenTreeSetting` for all possible parameters. -### Example +### Example Plugin Below is a simple example of how a plugin can implement settings: diff --git a/docs/docs/extend/plugins/urls.md b/docs/docs/extend/plugins/urls.md index 4931904d39..b1fce4dc2a 100644 --- a/docs/docs/extend/plugins/urls.md +++ b/docs/docs/extend/plugins/urls.md @@ -65,7 +65,7 @@ Additionally, add the following imports after the extended line. #### Blocks The page_base file is split into multiple sections called blocks. This allows you to implement sections of the webpage while getting many items like navbars, sidebars, and general layout provided for you. -The current default page base can be found [here](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/templates/page_base.html). Look through this file to determine overridable blocks. The [stock app](https://github.com/inventree/InvenTree/tree/master/src/backend/InvenTree/stock) offers a great example of implementing these blocks. +The current default page base can be found [here]({{ sourcefile("src/backend/InvenTree/templates/page_base.html") }}). Look through this file to determine overridable blocks. The [stock app]({{ sourcedir("src/backend/InvenTree/stock") }}) offers a great example of implementing these blocks. !!! warning "Sidebar Block" You may notice that implementing the `sidebar` block doesn't initially work. Be sure to enable the sidebar using JavaScript. This can be achieved by appending the following code, replacing `label` with a label of your choosing, to the end of your template file. diff --git a/docs/docs/extend/plugins/validation.md b/docs/docs/extend/plugins/validation.md index a200ab2416..0002cf0232 100644 --- a/docs/docs/extend/plugins/validation.md +++ b/docs/docs/extend/plugins/validation.md @@ -9,34 +9,40 @@ The `ValidationMixin` class enables plugins to perform custom validation of obje Any of the methods described below can be implemented in a custom plugin to provide functionality as required. !!! info "More Info" - For more information on any of the methods described below, refer to the InvenTree source code. [A working example is available as a starting point](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/plugin/samples/integration/validation_sample.py). + For more information on any of the methods described below, refer to the InvenTree source code. [A working example is available as a starting point]({{ sourcefile("src/backend/InvenTree/plugin/samples/integration/validation_sample.py") }}). !!! info "Multi Plugin Support" It is possible to have multiple plugins loaded simultaneously which support validation methods. For example when validating a field, if one plugin returns a null value (`None`) then the *next* plugin (if available) will be queried. +## Model Deletion + +Any model which inherits the `PluginValidationMixin` class is exposed to the plugin system for custom deletion validation. Before the model is deleted from the database, it is first passed to the plugin ecosystem to check if it really should be deleted. + +A custom plugin may implement the `validate_model_deletion` method to perform custom validation on the model instance before it is deleted. + +::: plugin.base.integration.ValidationMixin.ValidationMixin.validate_model_deletion + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_sources: True + summary: False + members: [] + ## Model Validation Any model which inherits the `PluginValidationMixin` mixin class is exposed to the plugin system for custom validation. Before the model is saved to the database (either when created, or updated), it is first passed to the plugin ecosystem for validation. Any plugin which inherits the `ValidationMixin` can implement the `validate_model_instance` method, and run a custom validation routine. -The `validate_model_instance` method is passed the following arguments: - -| Argument | Description | -| --- | --- | -| `instance` | The model instance to be validated | -| `deltas` | A dict of field deltas (if the instance is being updated) | - -```python -def validate_model_instance(self, instance, deltas=None): - """Validate the supplied model instance. - - Arguments: - instance: The model instance to be validated - deltas: A dict of field deltas (if the instance is being updated) - """ - ... -``` +::: plugin.base.integration.ValidationMixin.ValidationMixin.validate_model_instance + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_sources: True + summary: False + members: [] ### Error Messages @@ -52,7 +58,7 @@ To indicate a *field* validation error (i.e. the validation error applies only t Note that an error can be which corresponds to multiple model instance fields. -### Example +### Example Plugin Presented below is a simple working example for a plugin which implements the `validate_model_instance` method: @@ -116,7 +122,7 @@ Validation of the Part IPN (Internal Part Number) field is exposed to custom plu The `validate_batch_code` method allows plugins to raise an error if a batch code input by the user does not meet a particular pattern. -The `generate_batch_code` method can be implemented to generate a new batch code. +The `generate_batch_code` method can be implemented to generate a new batch code, based on a set of provided information. ### Serial Numbers @@ -182,3 +188,15 @@ def increment_serial_number(self, serial: str): return val ``` + +## Sample Plugin + +A sample plugin which implements custom validation routines is provided in the InvenTree source code: + +::: plugin.samples.integration.validation_sample.SampleValidatorPlugin + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] diff --git a/docs/docs/extend/themes.md b/docs/docs/extend/themes.md index 5f89252eb1..49e4e185ee 100644 --- a/docs/docs/extend/themes.md +++ b/docs/docs/extend/themes.md @@ -14,7 +14,7 @@ Navigate to the "Settings" page and click on the "Display" tab, you should see t {% include 'img.html' %} {% endwith %} -The drop-down list let's you select any other color theme found in your static folder (see next section to find out how to [add color themes](#add-color-themes)). Once selected, click on the "Apply Theme" button for the new color theme to be activated. +The drop-down list let's you select any other color theme found in your static folder (see next section to find out how to [add color themes](#add-color-theme)). Once selected, click on the "Apply Theme" button for the new color theme to be activated. !!! info "Per-user Setting" Color themes are "user specific" which means that changing the color theme in your own settings won't affect other users. diff --git a/docs/docs/order/purchase_order.md b/docs/docs/order/purchase_order.md index b75a6a5d87..066f64d058 100644 --- a/docs/docs/order/purchase_order.md +++ b/docs/docs/order/purchase_order.md @@ -22,6 +22,20 @@ Each Purchase Order has a specific status code which indicates the current state | In Progress | The purchase order has been issued to the supplier, and is in progress | | Complete | The purchase order has been completed, and is now closed | | Cancelled | The purchase order was cancelled, and is now closed | +| Lost | The purchase order was lost, and is now closed | +| Returned | The purchase order was returned, and is now closed | + +**Source Code** + +Refer to the source code for the Purchase Order status codes: + +::: order.status_codes.PurchaseOrderStatus + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] ### Purchase Order Currency diff --git a/docs/docs/order/return_order.md b/docs/docs/order/return_order.md index 3352889286..4b134601ae 100644 --- a/docs/docs/order/return_order.md +++ b/docs/docs/order/return_order.md @@ -48,6 +48,18 @@ Each Return Order has a specific status code, as follows: | Complete | The return order was marked as complete, and is now closed | | Cancelled | The return order was cancelled, and is now closed | +**Source Code** + +Refer to the source code for the Return Order status codes: + +::: order.status_codes.ReturnOrderStatus + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + ## Create a Return Order From the Return Order index, click on New Return Order which opens the "Create Return Order" form. @@ -98,7 +110,7 @@ While [line items](#line-items) must reference a particular stock item, extra li ## Return Order Reports -Custom [reports](../report/return_order.md) can be generated against each Return Order. +Custom [reports](../report/templates.md) can be generated against each Return Order. ### Calendar view diff --git a/docs/docs/order/sales_order.md b/docs/docs/order/sales_order.md index 1d37e2410d..43ab9cc533 100644 --- a/docs/docs/order/sales_order.md +++ b/docs/docs/order/sales_order.md @@ -20,8 +20,23 @@ Each Sales Order has a specific status code, which represents the state of the o | --- | --- | | Pending | The sales order has been created, but has not been finalized or submitted | | In Progress | The sales order has been issued, and is in progress | -| Shipped | The sales order has been completed, and is now closed | +| Shipped | The sales order has been shipped, but is not yet complete | +| Complete | The sales order is fully completed, and is now closed | | Cancelled | The sales order was cancelled, and is now closed | +| Lost | The sales order was lost, and is now closed | +| Returned | The sales order was returned, and is now closed | + +**Source Code** + +Refer to the source code for the Sales Order status codes: + +::: order.status_codes.SalesOrderStatus + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] ### Sales Order Currency @@ -83,7 +98,7 @@ To view all the completed shipment, click on the Complete Order to mark the sales order as complete. +Once all items in the sales order have been shipped, click on Complete Order to mark the sales order as shipped. Confirm then click on Submit to complete the order. ### Cancel Order diff --git a/docs/docs/releases/0.1.6.md b/docs/docs/releases/0.1.6.md index 91626a34d1..2e550c6ca9 100644 --- a/docs/docs/releases/0.1.6.md +++ b/docs/docs/releases/0.1.6.md @@ -24,7 +24,7 @@ Refer to the [report documentation](../report/report.md) for further information !!! warning "LaTeX Support" LaTeX report templates are no longer supported for a number of technical and ideological reasons -[#1292](https://github.com/inventree/InvenTree/pull/1292) adds support for build order / work order reports. Refer to the [build report documentation](../report/build.md) for further information. +[#1292](https://github.com/inventree/InvenTree/pull/1292) adds support for build order / work order reports. Refer to the [report documentation](../report/templates.md) for further information. ### Inherited BOM Items diff --git a/docs/docs/releases/0.2.1.md b/docs/docs/releases/0.2.1.md index c992bd7db6..506cce8d4c 100644 --- a/docs/docs/releases/0.2.1.md +++ b/docs/docs/releases/0.2.1.md @@ -32,7 +32,7 @@ Details on how to create and manage manufacturer parts were added [#1462](https://github.com/inventree/InvenTree/pull/1417) adds the ability to create a QR code containing the URL of a StockItem, which can be opened directly -on a portable device using the camera or a QR code scanner. More details [here](../report/labels.md#url-style-qr-code). +on a portable device using the camera or a QR code scanner. More details [here](../report/labels.md). ## Major Bug Fixes diff --git a/docs/docs/releases/0.7.0.md b/docs/docs/releases/0.7.0.md index 80d4f7910d..91eafd196f 100644 --- a/docs/docs/releases/0.7.0.md +++ b/docs/docs/releases/0.7.0.md @@ -53,7 +53,7 @@ This release also provides a marked improvement in unit testing and code coverag [#2372](https://github.com/inventree/InvenTree/pull/2372) provides an overhaul of notifications, allowing users to view their notifications directly in the InvenTree interface. ### Why are you hiding my name? -[#2861](https://github.com/inventree/InvenTree/pull/2861) adds several changes to enable admins to remove more of InvenTrees branding. Change logo, hide the about-modal for all but superusers and add custom messages to login and main navbar. Check out [the docs](../start/config.md#customisation-options). +[#2861](https://github.com/inventree/InvenTree/pull/2861) adds several changes to enable admins to remove more of InvenTrees branding. Change logo, hide the about-modal for all but superusers and add custom messages to login and main navbar. Check out [the docs](../start/config.md#customization-options) ### Label Printing Plugin diff --git a/docs/docs/report/bom.md b/docs/docs/report/bom.md deleted file mode 100644 index c6f18a3d2f..0000000000 --- a/docs/docs/report/bom.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: BOM Generation ---- - -## BOM Generation - -The bill of materials is an essential part of the documentation that needs to be sent to the factory. A simple csv export is OK to be important into SMT machines. But for human readable documentation it might not be sufficient. Additional information is needed. The Inventree report system allows to generate BOM well formatted BOM reports. - -### Context variables -| Variable | Description | -| --- | --- | -| bom_items | Query set that contains all BOM items | -| bom_items...sub_part | One component of the BOM | -| bom_items...quantity | Number of parts | -| bom_items...reference | Reference designators of the part | -| bom_items...substitutes | Query set that contains substitutes of the part if any exist in the BOM | - -### Examples - -#### BOM - -The following picture shows a simple example for a PCB with just three components from two different parts. - -{% with id="report-options", url="report/bom_example.png", description="BOM example" %} {% include 'img.html' %} {% endwith %} - -This example has been created using the following html template: - -```html -{% raw %} -{% extends "report/inventree_report_base.html" %} - -{% load i18n %} -{% load report %} -{% load inventree_extras %} - -{% block page_margin %} -margin-left: 2cm; -margin-right: 1cm; -margin-top: 4cm; -{% endblock %} - -{% block bottom_left %} -content: "v{{report_revision}} - {% format_date date %}"; -{% endblock %} - -{% block bottom_center %} -content: "InvenTree v{% inventree_version %}"; -{% endblock %} - -{% block style %} -.header-left { - text-align: left; - float: left; -} -table { - border: 1px solid #eee; - border-radius: 3px; - border-collapse: collapse; - width: 100%; - font-size: 80%; -} -table td { - border: 1px solid #eee; -} -{% endblock %} - -{% block header_content %} -
-

{% trans "Bill of Materials" %}

-
-{% endblock %} - -{% block page_content %} - - - - - - -
Board{{ part.IPN }}
Description{{ part.description }}
User{{ user }}
Date{{ date }}
Number of different components (codes){{ bom_items.count }}
-
- - - - - - - - - - - - - {% for line in bom_items.all %} - - - - - - - - - {% endfor %} - -
{% trans "IPN" %}{% trans "MPN" %}{% trans "Manufacturer" %}{% trans "Quantity" %}{% trans "Reference" %}{% trans "Substitute" %}
{{ line.sub_part.IPN }}{{ line.sub_part.name }} - {% for manf in line.sub_part.manufacturer_parts.all %} - {{ manf.manufacturer.name }} - {% endfor %} - {% decimal line.quantity %}{{ line.reference }} - {% for sub in line.substitutes.all %} - {{ sub.part.IPN }}
- {% endfor %} -
- -{% endblock %} -{% endraw %} -``` - -#### Pick List - -When all material has been allocated someone has to pick all things from the warehouse. -In case you need a printed pick list you can use the following template. This it just the -table. All other info and CSS has been left out for simplicity. Please have a look at the -BOM report for details. - -{% raw %} -```html - - - - - - - - - - - {% for line in build.allocated_stock.all %} - - - {% if line.stock_item.part.IPN != line.bom_item.sub_part.IPN %} - - {% else %} - - {% endif %} - - - - {% endfor %} - -
Original IPNAllocated PartLocationPCS
{{ line.bom_item.sub_part.IPN }} {{ line.stock_item.part.IPN }} {{ line.stock_item.part.IPN }} {{ line.stock_item.location.pathstring }} {{ line.quantity }}
-``` -{% endraw %} - -Here we have a loop that runs through all allocated parts for the build. For each part -we list the original IPN from the BOM and the IPN of the allocated part. These can differ -in case you have substitutes or template/variants in the BOM. In case the parts differ -we use a different format for the table cell e.g. print bold font or red color. -For the picker we list the full path names of the stock locations and the quantity -that is needed for the build. This will result in the following printout: - -{% with id="picklist", url="report/picklist.png", description="Picklist Example" %} {% include "img.html" %} {% endwith %} - -For those of you who would like to replace the "/" by something else because it is hard -to read in some fonts use the following trick: - -{% raw %} -```html - {% for loc in line.stock_item.location.path %}{{ loc.name }}{% if not forloop.last %}-{% endif %}{% endfor %} -``` -{% endraw %} - -Here we use location.path which is a query set that contains the location path up to the -topmost parent. We use a loop to cycle through that and print the .name of the entry followed -by a "-". The foorloop.last is a Django trick that allows us to not print the "-" after -the last entry. The result looks like here: - -{% with id="picklist_with_path", url="report/picklist_with_path.png", description="Picklist Example" %} {% include "img.html" %} {% endwith %} - -Finally added a `{% raw %}|floatformat:0{% endraw %}` to the quantity that removes the trailing zeros. - -### Default Report Template - -A default *BOM Report* template is provided out of the box, which is useful for generating simple test reports. Furthermore, it may be used as a starting point for developing custom BOM reports: - -View the [source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templates/report/inventree_bill_of_materials_report.html) for the default test report template. diff --git a/docs/docs/report/build.md b/docs/docs/report/build.md deleted file mode 100644 index e249fe108b..0000000000 --- a/docs/docs/report/build.md +++ /dev/null @@ -1,324 +0,0 @@ ---- -title: Build Order Report ---- - -## Build Order Report - -Custom build order reports may be generated against any given [Build Order](../build/build.md). For example, build order reports can be used to generate work orders. - -### Build Filters - -A build order report template may define a set of filters against which [Build Order](../build/build.md) items are sorted. - -### Context Variables - -In addition to the default report context variables, the following context variables are made available to the build order report template for rendering: - -| Variable | Description | -| --- | --- | -| build | The build object the report is being generated against | -| part | The [Part](./context_variables.md#part) object that the build references | -| line_items | A shortcut for [build.line_items](#build) | -| bom_items | A shortcut for [build.bom_items](#build) | -| build_outputs | A shortcut for [build.build_outputs](#build) | -| reference | The build order reference string | -| quantity | Build order quantity (number of assemblies being built) | - -#### build - -The following variables are accessed by build.variable - -| Variable | Description | -| --- | --- | -| active | Boolean that tells if the build is active | -| batch | Batch code transferred to build parts (optional) | -| line_items | A query set with all the build line items associated with the build | -| bom_items | A query set with all BOM items for the part being assembled | -| build_outputs | A queryset containing all build output ([Stock Item](../stock/stock.md)) objects associated with this build | -| can_complete | Boolean that tells if the build can be completed. Means: All material allocated and all parts have been build. | -| are_untracked_parts_allocated | Boolean that tells if all bom_items have allocated stock_items. | -| creation_date | Date where the build has been created | -| completion_date | Date the build was completed (or, if incomplete, the expected date of completion) | -| completed_by | The [User](./context_variables.md#user) that completed the build | -| is_overdue | Boolean that tells if the build is overdue | -| is_complete | Boolean that tells if the build is complete | -| issued_by | The [User](./context_variables.md#user) who created the build | -| link | External URL for extra information | -| notes | Text notes | -| parent | Reference to a parent build object if this is a sub build | -| part | The [Part](./context_variables.md#part) to be built (from component BOM items) | -| quantity | Build order quantity (total number of assembly outputs) | -| completed | The number out outputs which have been completed | -| reference | Build order reference (required, must be unique) | -| required_parts | A query set with all parts that are required for the build | -| responsible | Owner responsible for completing the build. This can be a user or a group. Depending on that further context variables differ | -| sales_order | References to a [Sales Order](./context_variables.md#salesorder) object for which this build is required (e.g. the output of this build will be used to fulfil a sales order) | -| status | The status of the build. 20 means 'Production' | -| sub_build_count | Number of sub builds | -| sub_builds | Query set with all sub builds | -| target_date | Date the build will be overdue | -| take_from | [StockLocation](./context_variables.md#stocklocation) to take stock from to make this build (if blank, can take from anywhere) | -| title | The full name of the build | -| description | The description of the build | -| allocated_stock.all | A query set with all allocated stock items for the build | - -As usual items in a query sets can be selected by adding a .n to the set e.g. build.required_parts.0 -will result in the first part of the list. Each query set has again its own context variables. - -#### line_items - -The `line_items` variable is a list of all build line items associated with the selected build. The following attributes are available for each individual line_item instance: - -| Attribute | Description | -| --- | --- | -| .build | A reference back to the parent build order | -| .bom_item | A reference to the BOMItem which defines this line item | -| .quantity | The required quantity which is to be allocated against this line item | -| .part | A shortcut for .bom_item.sub_part | -| .allocations | A list of BuildItem objects which allocate stock items against this line item | -| .allocated_quantity | The total stock quantity which has been allocated against this line | -| .unallocated_quantity | The remaining quantity to allocate | -| .is_fully_allocated | Boolean value, returns True if the line item has sufficient stock allocated against it | -| .is_overallocated | Boolean value, returns True if the line item has more allocated stock than is required | - -#### bom_items - -| Attribute | Description | -| --- | --- | -| .reference | The reference designators of the components | -| .quantity | The number of components required to build | -| .overage | The extra amount required to assembly | -| .consumable | Boolean field, True if this is a "consumable" part which is not tracked through builds | -| .sub_part | The part at this position | -| .substitutes.all | A query set with all allowed substitutes for that part | -| .note | Extra text field which can contain additional information | - - -#### allocated_stock.all - -| Attribute | Description | -| --- | --- | -| .bom_item | The bom item where this part belongs to | -| .stock_item | The allocated [StockItem](./context_variables.md#stockitem) | -| .quantity | The number of components needed for the build (components in BOM x parts to build) | - -### Example - -The following example will create a report with header and BOM. In the BOM table substitutes will be listed. - -{% raw %} -```html -{% extends "report/inventree_report_base.html" %} - -{% load i18n %} -{% load report %} -{% load barcode %} -{% load inventree_extras %} -{% load markdownify %} - -{% block page_margin %} -margin: 2cm; -margin-top: 4cm; -{% endblock %} - -{% block style %} - -.header-right { - text-align: right; - float: right; -} - -.logo { - height: 20mm; - vertical-align: middle; -} - -.details { - width: 100%; - border: 1px solid; - border-radius: 3px; - padding: 5px; - min-height: 42mm; -} - -.details table { - overflow-wrap: break-word; - word-wrap: break-word; - width: 65%; - table-layout: fixed; - font-size: 75%; -} -.changes table { - overflow-wrap: break-word; - word-wrap: break-word; - width: 100%; - table-layout: fixed; - font-size: 75%; - border: 1px solid; -} - -.changes-table th { - font-size: 100%; - border: 1px solid; -} - -.changes-table td { - border: 1px solid; -} - -.details table td:not(:last-child){ - white-space: nowrap; -} - -.details table td:last-child{ - width: 50%; - padding-left: 1cm; - padding-right: 1cm; -} - -.details-table td { - padding-left: 10px; - padding-top: 5px; - padding-bottom: 5px; - border-bottom: 1px solid #555; -} - -{% endblock %} - -{% block bottom_left %} -content: "v{{report_revision}} - {% format_date date %}"; -{% endblock %} - -{% block header_content %} - - - -
-

- Build Order {{ build }} -

-
-
- -
-{% endblock %} - -{% block page_content %} - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if build.parent %} - - - - - {% endif %} - {% if build.issued_by %} - - - - - {% endif %} - {% if build.responsible %} - - - - - {% endif %} - - - - - {% if build.sub_build_count > 0 %} - - - - - {% endif %} - - - - - - - - -
{% trans "Build Order" %}{% internal_link build.get_absolute_url build %}
{% trans "Order" %}{{ reference }}
{% trans "Part" %}{% internal_link part.get_absolute_url part.IPN %}
{% trans "Quantity" %}{{ build.quantity }}
{% trans "Description" %}{{ build.title }}
{% trans "Issued" %}{% format_date build.creation_date %}
{% trans "Target Date" %} - {% if build.target_date %} - {% format_date build.target_date %} - {% else %} - Not specified - {% endif %} -
{% trans "Required For" %}{% internal_link build.parent.get_absolute_url build.parent %}
{% trans "Issued By" %}{{ build.issued_by }}
{% trans "Responsible" %}{{ build.responsible }}
{% trans "Sub builds count" %}{{ build.sub_build_count }}
{% trans "Sub Builds" %}{{ build.sub_builds }}
{% trans "Overdue" %}{{ build.is_overdue }}
{% trans "Can complete" %}{{ build.can_complete }}
-
- -

{% trans "Notes" %}

-{% if build.notes %} -{{ build.notes|markdownify }} -{% endif %} - -

{% trans "Parts" %}

- -
- - - - - - - - - - {% for line in build.bom_items %} - - - - - - {% endfor %} - -
Original IPNReferenceReplace width IPN
{{ line.sub_part.IPN }} {{ line.reference }} {{ line.substitutes.all.0.part.IPN }}
-
-{% endblock %} -``` - -{% endraw %} - -This will result a report page like this: - -{% with id="report-options", url="build/report-61.png", description="Report Example Builds" %} {% include "img.html" %} {% endwith %} - -### Default Report Template - -A default *Build Report* template is provided out of the box, which is useful for generating simple test reports. Furthermore, it may be used as a starting point for developing custom BOM reports: - -View the [source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templates/report/inventree_build_order_base.html) for the default build report template. diff --git a/docs/docs/report/context_variables.md b/docs/docs/report/context_variables.md index 4704d1560a..e6fe9bb698 100644 --- a/docs/docs/report/context_variables.md +++ b/docs/docs/report/context_variables.md @@ -2,64 +2,244 @@ title: Context Variables --- + ## Context Variables -### Report +Context variables are provided to each template when it is rendered. The available context variables depend on the model type for which the template is being rendered. -!!! info "Specific Report Context" - Specific report types may have additional context variables, see below. +### Global Context -Each report has access to a number of context variables by default. The following context variables are provided to every report template: +In addition to the model-specific context variables, the following global context variables are available to all templates: | Variable | Description | | --- | --- | +| base_url | The base URL for the InvenTree instance | | date | Current date, represented as a Python datetime.date object | | datetime | Current datetime, represented as a Python datetime object | -| page_size | The specified page size for this report, e.g. `A4` or `Letter landscape` | -| report_template | The report template model instance | -| report_name | Name of the report template | -| report_description | Description of the report template | -| report_revision | Revision of the report template | -| request | Django request object | +| template | The report template instance which is being rendered against | +| 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 | -#### Label +::: report.models.ReportTemplateBase.base_context + options: + show_source: True -Certain types of labels have different context variables then other labels. +### Report Context -##### Stock Item Label - -The following variables are made available to the StockItem label template: +In addition to the [global context](#global-context), all *report* templates have access to the following context variables: | Variable | Description | -| -------- | ----------- | -| item | The [StockItem](./context_variables.md#stockitem) object itself | -| part | The [Part](./context_variables.md#part) object which is referenced by the [StockItem](./context_variables.md#stockitem) object | -| name | The `name` field of the associated Part object | -| ipn | The `IPN` field of the associated Part object | -| revision | The `revision` field of the associated Part object | -| quantity | The `quantity` field of the StockItem object | -| serial | The `serial` field of the StockItem object | -| uid | The `uid` field of the StockItem object | -| tests | Dict object of TestResult data associated with the StockItem | +| --- | --- | +| page_size | The page size of the report | +| landscape | Boolean value, True if the report is in landscape mode | + +Note that custom plugins may also add additional context variables to the report context. + +::: report.models.ReportTemplate.get_context + options: + show_source: True + +### Label Context + +In addition to the [global context](#global-context), all *label* templates have access to the following context variables: + +| Variable | Description | +| --- | --- | +| width | The width of the label (in mm) | +| height | The height of the label (in mm) | + +Note that custom plugins may also add additional context variables to the label context. + +::: report.models.LabelTemplate.get_context + options: + show_source: True + + +## Template Types + +Templates (whether for generating [reports](./report.md) or [labels](./labels.md)) are rendered against a particular "model" type. The following model types are supported, and can have templates renderer against them: + +| Model Type | Description | +| --- | --- | +| [build](#build-order) | A [Build Order](../build/build.md) instance | +| [buildline](#build-line) | A [Build Order Line Item](../build/build.md) instance | +| [salesorder](#sales-order) | A [Sales Order](../order/sales_order.md) instance | +| [returnorder](#return-order) | A [Return Order](../order/return_order.md) instance | +| [purchaseorder](#purchase-order) | A [Purchase Order](../order/purchase_order.md) instance | +| [stockitem](#stock-item) | A [StockItem](../stock/stock.md#stock-item) instance | +| [stocklocation](#stock-location) | A [StockLocation](../stock/stock.md#stock-location) instance | +| [part](#part) | A [Part](../part/part.md) instance | + +### Build Order + +When printing a report or label against a [Build Order](../build/build.md) object, the following context variables are available: + +| Variable | Description | +| --- | --- | +| bom_items | Query set of all BuildItem objects associated with the BuildOrder | +| build | The BuildOrder instance itself | +| build_outputs | Query set of all BuildItem objects associated with the BuildOrder | +| line_items | Query set of all build line items associated with the BuildOrder | +| part | The Part object which is being assembled in the build order | +| quantity | The total quantity of the part being assembled | +| reference | The reference field of the BuildOrder | +| title | The title field of the BuildOrder | + +::: build.models.Build.report_context + options: + show_source: True + +### Build Line + +When printing a report or label against a [BuildOrderLineItem](../build/build.md) object, the following context variables are available: + +| Variable | Description | +| --- | --- | +| allocated_quantity | The quantity of the part which has been allocated to this build | +| allocations | A query set of all StockItem objects which have been allocated to this build line | +| bom_item | The BomItem associated with this line item | +| build | The BuildOrder instance associated with this line item | +| build_line | The build line instance itself | +| part | The sub-part (component) associated with the linked BomItem instance | +| quantity | The quantity required for this line item | + +::: build.models.BuildLine.report_context + options: + show_source: True + + +### Sales Order + +When printing a report or label against a [SalesOrder](../order/sales_order.md) object, the following context variables are available: + +| Variable | Description | +| --- | --- | +| customer | The customer object associated with the SalesOrder | +| description | The description field of the SalesOrder | +| extra_lines | Query set of all extra lines associated with the SalesOrder | +| lines | Query set of all line items associated with the SalesOrder | +| order | The SalesOrder instance itself | +| reference | The reference field of the SalesOrder | +| title | The title (string representation) of the SalesOrder | + +::: order.models.Order.report_context + options: + show_source: True + +### Return Order + +When printing a report or label against a [ReturnOrder](../order/return_order.md) object, the following context variables are available: + +| Variable | Description | +| --- | --- | +| customer | The customer object associated with the ReturnOrder | +| description | The description field of the ReturnOrder | +| extra_lines | Query set of all extra lines associated with the ReturnOrder | +| lines | Query set of all line items associated with the ReturnOrder | +| order | The ReturnOrder instance itself | +| reference | The reference field of the ReturnOrder | +| title | The title (string representation) of the ReturnOrder | + +### Purchase Order + +When printing a report or label against a [PurchaseOrder](../order/purchase_order.md) object, the following context variables are available: + +| Variable | Description | +| --- | --- | +| description | The description field of the PurchaseOrder | +| extra_lines | Query set of all extra lines associated with the PurchaseOrder | +| lines | Query set of all line items associated with the PurchaseOrder | +| order | The PurchaseOrder instance itself | +| reference | The reference field of the PurchaseOrder | +| supplier | The supplier object associated with the PurchaseOrder | +| title | The title (string representation) of the PurchaseOrder | + +### Stock Item + +When printing a report or label against a [StockItem](../stock/stock.md#stock-item) object, the following context variables are available: + +| Variable | Description | +| --- | --- | +| barcode_data | Generated barcode data for the StockItem | +| barcode_hash | Hash of the barcode data | +| batch | The batch code for the StockItem | +| child_items | Query set of all StockItem objects which are children of this StockItem | +| ipn | The IPN (internal part number) of the associated Part | +| installed_items | Query set of all StockItem objects which are installed in this StockItem | +| item | The StockItem object itself | +| name | The name of the associated Part | +| part | The Part object which is associated with the StockItem | +| qr_data | Generated QR code data for the StockItem | +| qr_url | Generated URL for embedding in a QR code | | parameters | Dict object containing the parameters associated with the base Part | +| quantity | The quantity of the StockItem | +| result_list | FLattened list of TestResult data associated with the stock item | +| results | Dict object of TestResult data associated with the StockItem | +| serial | The serial number of the StockItem | +| stock_item | The StockItem object itself (shadow of 'item') | +| tests | Dict object of TestResult data associated with the StockItem (shadow of 'results') | +| test_keys | List of test keys associated with the StockItem | +| test_template_list | List of test templates associated with the StockItem | +| test_templates | Dict object of test templates associated with the StockItem | + +::: stock.models.StockItem.report_context + options: + show_source: True -##### Stock Location Label +### Stock Location -The following variables are made available to the StockLocation label template: +When printing a report or label against a [StockLocation](../stock/stock.md#stock-location) object, the following context variables are available: | Variable | Description | -| -------- | ----------- | -| location | The [StockLocation](./context_variables.md#stocklocation) object itself | +| --- | --- | +| location | The StockLocation object itself | +| qr_data | Formatted QR code data for the StockLocation | +| parent | The parent StockLocation object | +| stock_location | The StockLocation object itself (shadow of 'location') | +| stock_items | Query set of all StockItem objects which are located in the StockLocation | + +::: stock.models.StockLocation.report_context + options: + show_source: True + + +### Part + +When printing a report or label against a [Part](../part/part.md) object, the following context variables are available: + +| Variable | Description | +| --- | --- | +| bom_items | Query set of all BomItem objects associated with the Part | +| category | The PartCategory object associated with the Part | +| description | The description field of the Part | +| IPN | The IPN (internal part number) of the Part | +| name | The name of the Part | +| parameters | Dict object containing the parameters associated with the Part | +| part | The Part object itself | +| qr_data | Formatted QR code data for the Part | +| qr_url | Generated URL for embedding in a QR code | +| revision | The revision of the Part | +| test_template_list | List of test templates associated with the Part | +| test_templates | Dict object of test templates associated with the Part | + +::: part.models.Part.report_context + options: + show_source: True + +## Model Variables + +Additional to the context variables provided directly to each template, each model type has a number of attributes and methods which can be accessedd via the template. + +For each model type, a subset of the most commonly used attributes are listed below. For a full list of attributes and methods, refer to the source code for the particular model type. ### Parts -!!! incomplete "TODO" - This section requires further work - #### Part -Each part object has access to a lot of context variables about the part. The following context variables are provided when accessing a `Part` object: + +Each part object has access to a lot of context variables about the part. The following context variables are provided when accessing a `Part` object from within the template. | Variable | Description | |----------|-------------| @@ -106,6 +286,7 @@ Each part object has access to a lot of context variables about the part. The fo #### Part Category + | Variable | Description | |----------|-------------| | name | Name of this category | @@ -117,6 +298,7 @@ Each part object has access to a lot of context variables about the part. The fo #### StockItem + | Variable | Description | |----------|-------------| | parent | Link to another [StockItem](./context_variables.md#stockitem) from which this StockItem was created | @@ -139,7 +321,7 @@ Each part object has access to a lot of context variables about the part. The fo | notes | Extra notes field | | build | Link to a Build (if this stock item was created from a build) | | is_building | Boolean field indicating if this stock item is currently being built (or is "in production") | -| purchase_order | Link to a [PurchaseOrder](./context_variables.md#purchaseorder) (if this stock item was created from a PurchaseOrder) | +| purchase_order | Link to a [PurchaseOrder](./context_variables.md#purchase-order) (if this stock item was created from a PurchaseOrder) | | infinite | If True this [StockItem](./context_variables.md#stockitem) can never be exhausted | | sales_order | Link to a [SalesOrder](./context_variables.md#salesorder) object (if the StockItem has been assigned to a SalesOrder) | | purchase_price | The unit purchase price for this [StockItem](./context_variables.md#stockitem) - this is the unit price at time of purchase (if this item was purchased from an external supplier) | @@ -164,6 +346,7 @@ Each part object has access to a lot of context variables about the part. The fo #### Company + | Variable | Description | |----------|-------------| | name | Name of the company | @@ -184,6 +367,7 @@ Each part object has access to a lot of context variables about the part. The fo #### Address + | Variable | Description | |----------|-------------| | line1 | First line of the postal address | @@ -194,9 +378,6 @@ Each part object has access to a lot of context variables about the part. The fo #### Contact -Contacts are added to companies. Actually the company has no link to the contacts. -You can search the company object of the contact. - | Variable | Description | |----------|-------------| | company | Company object where the contact belongs to | @@ -207,6 +388,7 @@ You can search the company object of the contact. #### SupplierPart + | Variable | Description | |----------|-------------| | part | Link to the master Part (Obsolete) | @@ -226,24 +408,13 @@ You can search the company object of the contact. | has_price_breaks | Whether this [SupplierPart](./context_variables.md#supplierpart) has price breaks | | manufacturer_string | Format a MPN string for this [SupplierPart](./context_variables.md#supplierpart). Concatenates manufacture name and part number. | -### Manufacturers - -!!! incomplete "TODO" - This section requires further work - -#### Manufacturer - -| Variable | Description | -|----------|-------------| - -#### ManufacturerPart - -| Variable | Description | -|----------|-------------| ### Orders -The [Purchase Order](../order/purchase_order.md) context variables are described in the [Purchase Order](./purchase_order.md) section. +#### Purchase Order + +!!! note "TODO" + This section is incomplete #### SalesOrder diff --git a/docs/docs/report/helpers.md b/docs/docs/report/helpers.md index 605d3e50cd..ce2a1d9188 100644 --- a/docs/docs/report/helpers.md +++ b/docs/docs/report/helpers.md @@ -12,13 +12,13 @@ Some common functions are provided for use in custom report and label templates. ``` !!! tip "Use the Source, Luke" - To see the full range of available helper functions, refer to the source file [report.py](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templatetags/report.py) where these functions are defined! + To see the full range of available helper functions, refer to the source file [report.py]({{ sourcefile("src/backend/InvenTree/report/templatetags/report.py") }}) where these functions are defined! ## Assigning Variables When making use of helper functions within a template, it can be useful to store the result of the function to a variable, rather than immediately rendering the output. -For example, using the [render_currency](#rendering-currency) helper function, we can store the output to a variable which can be used at a later point in the template: +For example, using the [render_currency](#currency-formatting) helper function, we can store the output to a variable which can be used at a later point in the template: ```html {% raw %} @@ -272,7 +272,7 @@ A template tag is provided to load the InvenTree logo image into a report. You c ### Custom Logo -If the system administrator has enabled a [custom logo](../start/config.md#customisation-options), then this logo will be used instead of the base InvenTree logo. +If the system administrator has enabled a [custom logo](../start/config.md#customization-options) then this logo will be used instead of the base InvenTree logo. This is a useful way to get a custom company logo into your reports. @@ -287,7 +287,7 @@ If you have a custom logo, but explicitly wish to load the InvenTree logo itself ## Report Assets -[Report Assets](./report.md#report-assets) are files specifically uploaded by the user for inclusion in generated reports and labels. +[Report Assets](./templates.md#report-assets) are files specifically uploaded by the user for inclusion in generated reports and labels. You can add asset images to the reports and labels by using the `{% raw %}{% asset ... %}{% endraw %}` template tag: diff --git a/docs/docs/report/labels.md b/docs/docs/report/labels.md index 5518210559..f2f455ec36 100644 --- a/docs/docs/report/labels.md +++ b/docs/docs/report/labels.md @@ -11,17 +11,6 @@ Custom labels can be generated using simple HTML templates, with support for QR- Simple (generic) label templates are supplied 'out of the box' with InvenTree - however support is provided for generation of extremely specific custom labels, to meet any particular requirement. -## Label Types - -The following types of labels are available - -| Label Type | Description | -| --- | --- | -| [Part Labels](./labels/part_labels.md) | Print labels for individual parts | -| [Stock Labels](./labels/stock_labels.md) | Print labels for individual stock items | -| [Location Labels](./labels/location_labels.md) | Print labels for individual stock locations -| [Build Labels](./labels/build_labels.md) | Print labels for individual build order line items | - ## Label Templates Label templates are written using a mixture of [HTML](https://www.w3schools.com/html/) and [CSS](https://www.w3schools.com/css). [Weasyprint](https://weasyprint.org/) templates support a *subset* of HTML and CSS features. In addition to supporting HTML and CSS formatting, the label templates support the Django templating engine, allowing conditional formatting of the label data. diff --git a/docs/docs/report/labels/build_labels.md b/docs/docs/report/labels/build_labels.md deleted file mode 100644 index 0a3924a106..0000000000 --- a/docs/docs/report/labels/build_labels.md +++ /dev/null @@ -1,118 +0,0 @@ ---- -title: Build Labels ---- - -## Build Line Labels - -Build label templates are used to generate labels for individual build order line items. - -### Creating Build Line Label Templates - -Build label templates are added (and edited) via the [admin interface](../../settings/admin.md). - -### Printing Build Line Labels - -Build line labels are printed from the Build Order page, under the *Allocate Stock* tab. Multiple line items can be selected for printing: - -{% with id='print_build_labels', url='report/label_build_print.png', description='Print build line labels' %} -{% include 'img.html' %} -{% endwith %} - -### Context Data - -The following context variables are made available to the Build Line label template: - -| Variable | Description | -| --- | --- | -| build_line | The build_line instance | -| build | The build order to which the build_line is linked | -| bom_item | The bom_item to which the build_line is linked | -| part | The required part for this build_line instance. References bom_item.sub_part | -| quantity | The total quantity required for the build line | -| allocated_quantity | The total quantity which has been allocated against the build line | -| allocations | A queryset containing the allocations made against the build_line | - -## Example - -A simple example template is shown below: - -```html -{% raw %} -{% extends "label/label_base.html" %} -{% load barcode report %} -{% load inventree_extras %} - -{% block style %} - -{{ block.super }} - -.label { - margin: 1mm; -} - -.qr { - height: 28mm; - width: 28mm; - position: relative; - top: 0mm; - right: 0mm; - float: right; -} - -.label-table { - width: 100%; - border-collapse: collapse; - border: 1pt solid black; -} - -.label-table tr { - width: 100%; - border-bottom: 1pt solid black; - padding: 2.5mm; -} - -.label-table td { - padding: 3mm; -} - -{% endblock style %} - -{% block content %} - -
- - - - - - - - - -
- Build Order: {{ build.reference }}
- Build Qty: {% decimal build.quantity %}
-
- build qr -
- Part: {{ part.name }}
- {% if part.IPN %} - IPN: {{ part.IPN }}
- {% endif %} - Qty / Unit: {% decimal bom_item.quantity %} {% if part.units %}[{{ part.units }}]{% endif %}
- Qty Total: {% decimal quantity %} {% if part.units %}[{{ part.units }}]{% endif %} -
- part qr -
-
- -{% endblock content %} - -{% endraw %} -``` - -Which results in a label like: - -{% with id='build_label_example', url='report/label_build_example.png', description='Example build line labels' %} -{% include 'img.html' %} -{% endwith %} diff --git a/docs/docs/report/labels/location_labels.md b/docs/docs/report/labels/location_labels.md deleted file mode 100644 index e7af905d75..0000000000 --- a/docs/docs/report/labels/location_labels.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Location Labels ---- - - -## Stock Location Labels - -Stock Location label templates are used to generate labels for individual Stock Locations. - -### Creating Stock Location Label Templates - -Stock Location label templates are added (and edited) via the admin interface. - -### Printing Stock Location Labels - -To print a single label from the Stock Location detail view, select the *Print Label* option. - -### Context Data - -The following variables are made available to the StockLocation label template: - -| Variable | Description | -| -------- | ----------- | -| location | The [StockLocation](../context_variables.md#stocklocation) object itself | diff --git a/docs/docs/report/labels/part_labels.md b/docs/docs/report/labels/part_labels.md deleted file mode 100644 index 7e9e5606b8..0000000000 --- a/docs/docs/report/labels/part_labels.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Part Labels ---- - - -## Part Labels - -Part label templates are used to generate labels for individual Part instances. - -### Creating Part Label Templates - -Part label templates are added (and edited) via the admin interface. - -### Printing Part Labels - -Part label can be printed using the following approaches: - -To print a single part label from the Part detail view, select the *Print Label* option. - -To print multiple part labels, select multiple parts in the part table and select the *Print Labels* option. - -### Context Data - -The following context variables are made available to the Part label template: - -| Variable | Description | -| -------- | ----------- | -| part | The [Part](../context_variables.md#part) object | -| category | The [Part Category](../context_variables.md#part-category) which contains the Part | -| name | The name of the part | -| description | The description text for the part | -| IPN | Internal part number (IPN) for the part | -| revision | Part revision code | -| qr_data | String data which can be rendered to a QR code | -| parameters | Map (Python dictionary) object containing the parameters associated with the part instance | - -#### Parameter Values - -The part parameter *values* can be accessed by parameter name lookup in the template, as follows: - -```html -{% raw %} - -Part: {{ part.name }} -Length: {{ parameters.length }} - -{% endraw %} -``` - -!!! warning "Spaces" - Note that for parameters which include a `space` character in their name, lookup using the "dot" notation won't work! In this case, try using the [key lookup](../helpers.md#key-access) method: - -```html -{% raw %} - -Voltage Rating: {% getkey parameters "Voltage Rating" %} -{% endraw %} -``` - -#### Parameter Data - -If you require access to the parameter data itself, and not just the "value" of a particular parameter, you can use the `part_parameter` [helper function](../helpers.md#part-parameters). - -For example, the following label template can be used to generate a label which contains parameter data in addition to parameter units: - -```html -{% raw %} -{% extends "label/label_base.html" %} - -{% load report %} - -{% block content %} - -{% part_parameter part "Width" as width %} -{% part_parameter part "Length" as length %} - -
- Part: {{ part.full_name }}
- Width: {{ width.data }} [{{ width.units }}]
- Length: {{ length.data }} [{{ length.units }}] -
- -{% endblock content %} -{% endraw %} -``` - -The following label is produced: - -{% with id="report-parameters", url="report/label_with_parameters.png", description="Label with parameters" %} -{% include 'img.html' %} -{% endwith %} diff --git a/docs/docs/report/labels/stock_labels.md b/docs/docs/report/labels/stock_labels.md deleted file mode 100644 index eb72147284..0000000000 --- a/docs/docs/report/labels/stock_labels.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Stock Labels ---- - - -## Stock Item Labels - -Stock Item label templates are used to generate labels for individual Stock Items. - -### Creating Stock Item Label Templates - -Stock Item label templates are added (and edited) via the admin interface. - -### Printing Stock Item Labels - -Stock Item labels can be printed using the following approaches: - -To print a single stock item from the Stock Item detail view, select the *Print Label* option as shown below: - -{% with id='item_label_single', url='report/label_stock_print_single.png', description='Print single stock item label' %} -{% include 'img.html' %} -{% endwith %} - -To print multiple stock items from the Stock table view, select the *Print Labels* option as shown below: - -{% with id='item_label_multiple', url='report/label_stock_print_multiple.png', description='Print multiple stock item labels' %} -{% include 'img.html' %} -{% endwith %} - -### Context Data - -The following variables are made available to the StockItem label template: - -| Variable | Description | -| -------- | ----------- | -| item | The [StockItem](../context_variables.md#stockitem) object itself | -| part | The [Part](../context_variables.md#part) object which is referenced by the [StockItem](../context_variables.md#stockitem) object | -| name | The `name` field of the associated Part object | -| ipn | The `IPN` field of the associated Part object | -| revision | The `revision` field of the associated Part object | -| quantity | The `quantity` field of the StockItem object | -| serial | The `serial` field of the StockItem object | -| uid | The `uid` field of the StockItem object | -| tests | Dict object of TestResult data associated with the StockItem | -| parameters | Dict object containing the parameters associated with the base Part | - -### URL-style QR code - -Stock Item labels support [QR code](../barcodes.md#qr-code) containing the stock item URL, which can be -scanned and opened directly -on a portable device using the camera or a QR code scanner. To generate a URL-style QR code for stock item in the [label HTML template](../labels.md#label-templates), add the -following HTML tag: - -``` html -{% raw %} - -{% endraw %} -``` - -Make sure to customize the `custom_qr_class` CSS class to define the position of the QR code -on the label. diff --git a/docs/docs/report/purchase_order.md b/docs/docs/report/purchase_order.md deleted file mode 100644 index 045e1afa7a..0000000000 --- a/docs/docs/report/purchase_order.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Purchase Order Report ---- - -## Purchase Order Reports - -Custom purchase order reports may be generated against any given [Purchase Order](../order/purchase_order.md). For example, purchase order reports could be used to generate a pdf of the order to send to a supplier. - -### Purchase Order Filters - -The report template can be filtered against available [Purchase Order](../order/purchase_order.md) instances. - -### Context Variables - -In addition to the default report context variables, the following variables are made available to the purchase order report template for rendering: - -| Variable | Description | -| --- | --- | -| order | The specific Purchase Order object | -| reference | The order reference field (can also be accessed as `{% raw %}{{ order.reference }}{% endraw %}`) | -| description | The order description field | -| supplier | The [supplier](../order/company.md#suppliers) associated with this purchase order | -| lines | A list of available line items for this order | -| extra_lines | A list of available *extra* line items for this order | -| order.created_by | The user who created the order | -| order.responsible | The user or group who is responsible for the order | -| order.creation_date | The date when the order was created | -| order.target_date | The date when the order should arrive | -| order.if_overdue | Boolean value that tells if the target date has passed | -| order.currency | The currency code associated with this order, e.g. 'AUD' | -| order.contact | The [contact](./context_variables.md#contact) object associated with this order | - -#### Lines - -Each line item (available within the `lines` list) has sub variables, as follows: - -| Variable | Description | -| --- | --- | -| quantity | The quantity of the part to be ordered | -| part | The [supplierpart ](./context_variables.md#supplierpart) object to be ordered | -| reference | The reference given in the part of the order | -| notes | The notes given in the part of the order | -| target_date | The date when the part should arrive. Each part can have an individual date | -| price | The unit price the line item | -| total_line_price | The total price for this line item, calculated from the unit price and quantity | -| destination | The stock location where the part will be stored | - -A simple example below shows how to use the context variables for each line item: - -```html -{% raw %} -{% for line in lines %} -Internal Part: {{ line.part.part.name }} - {{ line.part.part.description }} -SKU: {{ line.part.SKU }} -Price: {% render_currency line.total_line_price %} -{% endfor %} -{% endraw %} -``` - - -### Default Report Template - -A default *Purchase Order Report* template is provided out of the box, which is useful for generating simple test reports. Furthermore, it may be used as a starting point for developing custom BOM reports: - -View the [source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templates/report/inventree_po_report_base.html) for the default purchase order report template. diff --git a/docs/docs/report/report.md b/docs/docs/report/report.md index 468802bf5c..cff02f5141 100644 --- a/docs/docs/report/report.md +++ b/docs/docs/report/report.md @@ -1,14 +1,14 @@ --- -title: Report Generation +title: Report and LabelGeneration --- -## Custom Reporting +## Custom Reports -InvenTree supports a customizable reporting ecosystem, allowing the user to develop reporting templates that meet their particular needs. +InvenTree supports a customizable reporting ecosystem, allowing the user to develop document templates that meet their particular needs. -PDF reports are generated from custom HTML template files which are written by the user. +PDF files are generated from custom HTML template files which are written by the user. -Reports are used in a variety of situations to format data in a friendly format for printing, distribution, conformance and testing. +Templates can be used to generate *reports* or *labels* which can be used in a variety of situations to format data in a friendly format for printing, distribution, conformance and testing. In addition to providing the ability for end-users to provide their own reporting templates, some report types offer "built-in" report templates ready for use. @@ -44,290 +44,3 @@ For example, rendering the name of a part (which is available in the particular

{% endraw %} ``` - -### Context Variables - -!!! info "Context Variables" - Templates will have different variables available to them depending on the report type. Read the detailed information on each available report type for further information. - -Please refer to the [Context variables](./context_variables.md) page. - -### Conditional Rendering - -The django template system allows for conditional rendering, providing conditional flow statements such as: - -``` -{% raw %} -{% if %} -{% do_something %} -{% elif %} - -{% else %} - -{% endif %} -{% endraw %} -``` - -``` -{% raw %} -{% for in %} -Item: {{ item }} -{% endfor %} -{% endraw %} -``` - -!!! info "Conditionals" - Refer to the [django template language documentation]({% include "django.html" %}/ref/templates/language/) for more information. - -### Localization Issues - -Depending on your localization scheme, inputting raw numbers into the formatting section template can cause some unintended issues. Consider the block below which specifies the page size for a rendered template: - -```html -{% raw %} - - - -{% endraw %} -``` - -If localization settings on the InvenTree server use a comma (`,`) character as a decimal separator, this may produce an output like: - -```html -{% raw %} -{% endraw %} - - - -``` - -The resulting `{% raw %} - -{% endraw %} -``` - -!!! tip "Close it out" - Don't forget to end with a `{% raw %}{% endlocalize %}{% endraw %}` tag! - -!!! tip "l10n" - You will need to add `{% raw %}{% load l10n %}{% endraw %}` to the top of your template file to use the `{% raw %}{% localize %}{% endraw %}` tag. - -### Extending with Plugins - -The [ReportMixin plugin class](../extend/plugins/report.md) allows reporting functionality to be extended with custom features. - -## Report Types - -InvenTree supports the following reporting functionality: - -| Report Type | Description | -| --- | --- | -| [Test Report](./test.md) | Format results of a test report against for a particular StockItem | -| [Build Order Report](./build.md) | Format a build order report | -| [Purchase Order Report](./purchase_order.md) | Format a purchase order report | -| [Sales Order Report](./sales_order.md) | Format a sales order report | -| [Return Order Report](./return_order.md) | Format a return order report | -| [Stock Location Report](./stock_location.md) | Format a stock location report | - -### Default Reports - -InvenTree is supplied with a number of default templates "out of the box". These are generally quite simple, but serve as a starting point for building custom reports to suit a specific need. - -!!! tip "Read the Source" - The source code for the default reports is [available on GitHub](https://github.com/inventree/InvenTree/tree/master/src/backend/InvenTree/report/templates/report). Use this as a guide for generating your own reports! - -## Creating Reports - -Report templates are created (and edited) via the [admin interface](../settings/admin.md), under the *Report* section. Select the certain type of report template you are wanting to create, and press the *Add* button in the top right corner: - -{% with id="report-create", url="report/add_report_template.png", description="Create new report" %} -{% include 'img.html' %} -{% endwith %} - -!!! tip "Staff Access Only" - Only users with staff access can upload or edit report template files. - -!!! info "Editing Reports" - Existing reports can be edited from the admin interface, in the same location as described above. To change the contents of the template, re-upload a template file, to override the existing template data. - -### Name and Description - -Each report template requires a name and description, which identify and describe the report template. - -### Enabled Status - -Boolean field which determines if the specific report template is enabled, and available for use. Reports can be disabled to remove them from the list of available templates, but without deleting them from the database. - -### Filename Pattern - -The filename pattern used to generate the output `.pdf` file. Defaults to "report.pdf". - -The filename pattern allows custom rendering with any context variables which are available to the report. For example, a [test report](./test.md) for a particular [Stock Item](../stock/stock.md#stock-item) can use the part name and serial number of the stock item when generating the report name: - -{% with id="report-filename-pattern", url="report/filename_pattern.png", description="Report filename pattern" %} -{% include 'img.html' %} -{% endwith %} - - -### Report Filters - -Each type of report provides a *filters* field, which can be used to filter which items a report can be generated against. The target of the *filters* field depends on the type of report - refer to the documentation on the specific report type for more information. - -For example, the [Test Report](./test.md) filter targets the linked [Stock Item](../stock/status.md) object, and can be used to select which stock items are allowed for the given report. Let's say that a certain test report should only be generated for "trackable" stock items. A filter could easily be constructed to accommodate this, by limiting available items to those where the associated [Part](../part/part.md) is *trackable*: - -{% with id="report-filter-valid", url="report/filters_valid.png", description="Report filter selection" %} -{% include 'img.html' %} -{% endwith %} - -If you enter an invalid option for the filter field, an error message will be displayed: - -{% with id="report-filter-invalid", url="report/filters_invalid.png", description="Invalid filter selection" %} -{% include 'img.html' %} -{% endwith %} - -!!! warning "Advanced Users" - Report filtering is an advanced topic, and requires a little bit of knowledge of the underlying data structure! - -### Metadata - -A JSON field made available to any [plugins](../extend/plugins.md) - but not used by internal code. - -## Report Options - -A number of global reporting options are available for customizing InvenTree reports: - -{% with id="report-options", url="report/report.png", description="Report Options" %} -{% include 'img.html' %} -{% endwith %} - -### Enable Reports - -By default, the reporting feature is disabled. It must be enabled in the global settings. - - -### Default Page Size - -The built-in InvenTree report templates (and any reports which are derived from the built-in templates) use the *Page Size* option to set the page size of the generated reports. - -!!! info "Override Page Size" - Custom report templates do not have to make use of the *Page Size* option, although it is made available to the template context. - -### Debug Mode - -As templates are rendered directly to a PDF object, it can be difficult to debug problems when the PDF does not render exactly as expected. - -Setting the *Debug Mode* option renders the template as raw HTML instead of PDF, allowing the rendering output to be introspected. This feature allows template designers to understand any issues with the generated HTML (before it is passed to the PDF generation engine). - -!!! warning "HTML Rendering Limitations" - When rendered in debug mode, @page attributes (such as size, etc) will **not** be observed. Additionally, any asset files stored on the InvenTree server will not be rendered. Debug mode is not intended to produce "good looking" documents! - -## Report Assets - -User can upload asset files (e.g. images) which can be used when generating reports. For example, you may wish to generate a report with your company logo in the header. Asset files are uploaded via the admin interface. - -Asset files can be rendered directly into the template as follows - -```html -{% raw %} - -{% load report %} - - - - - - - - - - - - - - - -{% endraw %} -``` - -!!! warning "Asset Naming" - If the requested asset name does not match the name of an uploaded asset, the template will continue without loading the image. - -!!! info "Assets location" - You need to ensure your asset images to the report/assets directory in the [data directory](../start/intro.md#file-storage). Upload new assets via the [admin interface](../settings/admin.md) to ensure they are uploaded to the correct location on the server. - - -## Report Snippets - -A powerful feature provided by the django / WeasyPrint templating framework is the ability to include external template files. This allows commonly used template features to be broken out into separate files and re-used across multiple templates. - -To support this, InvenTree provides report "snippets" - short (or not so short) template files which cannot be rendered by themselves, but can be called from other templates. - -Similar to assets files, snippet template files are uploaded via the admin interface. - -Snippets are included in a template as follows: - -``` -{% raw %}{% include 'snippets/' %}{% endraw %} -``` - -For example, consider a stocktake report for a particular stock location, where we wish to render a table with a row for each item in that location. - -```html -{% raw %} - - - - - - - {% for item in location.stock_items %} - {% include 'snippets/stock_row.html' with item=item %} - {% endfor %} - - -{% endraw %} -``` - -!!! info "Snippet Arguments" - Note above that named argument variables can be passed through to the snippet! - -And the snippet file `stock_row.html` may be written as follows: - -```html -{% raw %} - - - - - -{% endraw %} -``` diff --git a/docs/docs/report/return_order.md b/docs/docs/report/return_order.md deleted file mode 100644 index c3403c7f98..0000000000 --- a/docs/docs/report/return_order.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Return Order Reports ---- - -## Return Order Reports - -Custom reports may be generated against any given [Return Order](../order/return_order.md). For example, return order reports can be used to generate an RMA request to send to a customer. - -### Context Variables - -In addition to the default report context variables, the following context variables are made available to the return order report template for rendering: - -| Variable | Description | -| --- | --- | -| order | The return order object the report is being generated against | -| description | The description of the order, also accessed through `order.description` | -| reference | The reference of the order, also accessed through `order.reference` | -| customer | The customer object related to this order | -| lines | The list of line items linked to this order | -| extra_lines | The list of extra line items linked to this order | - -### Default Report Template - -A default report template is provided out of the box, which can be used as a starting point for developing custom return order report templates. - -View the [source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templates/report/inventree_return_order_report_base.html) for the default return order report template. diff --git a/docs/docs/report/sales_order.md b/docs/docs/report/sales_order.md deleted file mode 100644 index 46e3aeddb5..0000000000 --- a/docs/docs/report/sales_order.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Sales Order Reports ---- - -## Sales Order Reports - -Custom sales order reports may be generated against any given [Sales Order](../order/sales_order.md). For example, a sales order report could be used to generate an invoice to send to a customer. - -### Sales Order Filters - -The report template can be filtered against available [Sales Order](../order/sales_order.md) instances. - -### Context Variables - -In addition to the default report context variables, the following variables are made available to the sales order report template for rendering: - -| Variable | Description | -| --- | --- | -| order | The specific Sales Order object | -| reference | The order reference field (can also be accessed as `{% raw %}{{ order.description }}{% endraw %}`) | -| description | The order description field | -| customer | The [customer](../order/company.md#customers) associated with the particular sales order | -| lines | A list of available line items for this order | -| extra_lines | A list of available *extra* line items for this order | -| order.currency | The currency code associated with this order, e.g. 'CAD' | - -### Default Report Template - -A default *Sales Order Report* template is provided out of the box, which is useful for generating simple test reports. Furthermore, it may be used as a starting point for developing custom BOM reports: - -View the [source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templates/report/inventree_so_report_base.html) for the default sales order report template. diff --git a/docs/docs/report/samples.md b/docs/docs/report/samples.md new file mode 100644 index 0000000000..d6dff5678b --- /dev/null +++ b/docs/docs/report/samples.md @@ -0,0 +1,78 @@ +--- +title: Sample Templates +--- + +## Sample Templates + +A number of pre-built templates are provided with InvenTree, which can be used as a starting point for creating custom reports and labels. + +Users can create their own custom templates, or modify the provided templates to suit their needs. + +## Report Templates + +The following report templates are provided "out of the box" and can be used as a starting point, or as a reference for creating custom reports templates: + +| Template | Model Type | Description | +| --- | --- | --- | +| [Bill of Materials](#bill-of-materials-report) | [Part](../part/part.md) | Bill of Materials report | +| [Build Order](#build-order) | [BuildOrder](../build/build.md) | Build Order report | +| [Purchase Order](#purchase-order) | [PurchaseOrder](../order/purchase_order.md) | Purchase Order report | +| [Return Order](#return-order) | [ReturnOrder](../order/return_order.md) | Return Order report | +| [Sales Order](#sales-order) | [SalesOrder](../order/sales_order.md) | Sales Order report | +| [Stock Location](#stock-location) | [StockLocation](../stock/stock.md#stock-location) | Stock Location report | +| [Test Report](#test-report) | [StockItem](../stock/stock.md#stock-item) | Test Report | + +### Bill of Materials Report + +{{ templatefile("report/inventree_bill_of_materials_report.html") }} + +### Build Order + +{{ templatefile("report/inventree_build_order_report.html") }} + +### Purchase Order + +{{ templatefile("report/inventree_bill_of_materials_report.html") }} + +### Return Order + +{{ templatefile("report/inventree_return_order_report.html") }} + +### Sales Order + +{{ templatefile("report/inventree_sales_order_report.html") }} + +### Stock Location + +{{ templatefile("report/inventree_stock_location_report.html") }} + +### Test Report + +{{ templatefile("report/inventree_test_report.html") }} + +## Label Templates + +The following label templates are provided "out of the box" and can be used as a starting point, or as a reference for creating custom label templates: + +| Template | Model Type | Description | +| --- | --- | --- | +| [Build Line](#build-line-label) | [Build line item](../build/build.md) | Build Line label | +| [Part](#part-label) | [Part](../part/part.md) | Part label | +| [Stock Item](#stock-item-label) | [StockItem](../stock/stock.md#stock-item) | Stock Item label | +| [Stock Location](#stock-location-label) | [StockLocation](../stock/stock.md#stock-location) | Stock Location label | + +### Build Line Label + +{{ templatefile("label/buildline_label.html") }} + +### Part Label + +{{ templatefile("label/part_label_code128.html") }} + +### Stock Item Label + +{{ templatefile("label/stockitem_qr.html") }} + +### Stock Location Label + +{{ templatefile("label/stocklocation_qr_and_text.html") }} diff --git a/docs/docs/report/stock_location.md b/docs/docs/report/stock_location.md deleted file mode 100644 index e1712c06d9..0000000000 --- a/docs/docs/report/stock_location.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Stock Location Reports ---- - -## Stock location Reports - -You can print a formatted report of a stock location. This makes sense if you have several parts inside one location, e.g. a box that is sent out to a manufacturing partner. Whit a report you can create a box content list. - -### Context Variables -You can use all content variables from the [StockLocation](./context_variables.md#stocklocation) object. - -### Default Report Template - -A default report template is provided out of the box, which can be used as a starting point for developing custom return order report templates. - -View the [source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templates/report/inventree_slr_report.html) for the default stock location report template. diff --git a/docs/docs/report/templates.md b/docs/docs/report/templates.md new file mode 100644 index 0000000000..465a4e16a9 --- /dev/null +++ b/docs/docs/report/templates.md @@ -0,0 +1,228 @@ +--- +title: InvenTree Templates +--- + +## Template Overview + +InvenTree supports a customizable reporting ecosystem, allowing the user to develop document templates that meet their particular needs. + +PDF files are generated from custom HTML template files which are written by the user. + +Templates can be used to generate *reports* or *labels* which can be used in a variety of situations to format data in a friendly format for printing, distribution, conformance and testing. + +In addition to providing the ability for end-users to provide their own reporting templates, some report types offer "built-in" report templates ready for use. + +## Template Types + +The following types of templates are available: + +### Reports + +Reports are intended to serve as formal documents, and can be used to generate formatted PDF outputs for a variety of purposes. + +Refer to the [report templates](./report.md) documentation for further information. + +### Labels + +Labels can also be generated using the templating system. Labels are intended to be used for printing small, formatted labels for items, parts, locations, etc. + +Refer to the [label templates](./labels.md) documentation for further information. + +### Template Model Types + +When generating a particular template (to render a report or label output), the template is rendered against a particular "model" type. The model type determines the data that is available to the template, and how it is formatted. + +To read more about the model types for which templates can be rendered, and the associated context information, refer to the [context variables](./context_variables.md) documentation. + +### Default Reports + +InvenTree is supplied with a number of default templates "out of the box" - for generating both labels and reports. These are generally quite simple, but serve as a starting point for building custom reports to suit a specific need. + +!!! tip "Read the Source" + The source code for the default reports is [available on GitHub]({{ sourcedir("src/backend/InvenTree/report/templates/report") }}). Use this as a guide for generating your own reports! + +### Extending with Plugins + +The [ReportMixin plugin class](../extend/plugins/report.md) allows reporting functionality to be extended with custom features. + +## WeasyPrint Template Rendering + +InvenTree report templates utilize the powerful [WeasyPrint](https://weasyprint.org/) PDF generation engine. + +To read more about the capabilities of the report templating engine, and how to use it, refer to the [weasyprint documentation](./weasyprint.md). + +## Creating Templates + +Report and label templates can be created (and edited) via the [admin interface](../settings/admin.md), under the *Report* section. + +Select the type of template you are wanting to create (a *Report Template* or *Label Template*) and press the *Add* button in the top right corner: + +{% with id="report-list", url="report/report_template_admin.png", description="Report templates in admin interface" %} +{% include 'img.html' %} +{% endwith %} + +!!! tip "Staff Access Only" + Only users with staff access can upload or edit report template files. + +!!! info "Editing Reports" + Existing reports can be edited from the admin interface, in the same location as described above. To change the contents of the template, re-upload a template file, to override the existing template data. + +!!! tip "Template Editor" + InvenTree also provides a powerful [template editor](./template_editor.md) which allows for the creation and editing of report templates directly within the browser. + +### Name and Description + +Each report template requires a name and description, which identify and describe the report template. + +### Enabled Status + +Boolean field which determines if the specific report template is enabled, and available for use. Reports can be disabled to remove them from the list of available templates, but without deleting them from the database. + +### Filename Pattern + +The filename pattern used to generate the output `.pdf` file. Defaults to "report.pdf". + +The filename pattern allows custom rendering with any context variables which are available to the report. For example, a test report for a particular [Stock Item](../stock/stock.md#stock-item) can use the part name and serial number of the stock item when generating the report name: + +{% with id="report-filename-pattern", url="report/filename_pattern.png", description="Report filename pattern" %} +{% include 'img.html' %} +{% endwith %} + + +### Template Filters + +Each template instance provides a *filters* field, which can be used to filter which items a report or label template can be generated against. The target of the *filters* field depends on the model type associated with the particular template. + +As an example, let's say that a certain `StockItem` report should only be generated for "trackable" stock items. A filter could easily be constructed to accommodate this, by limiting available items to those where the associated [Part](../part/part.md) is *trackable*: + +{% with id="report-filter-valid", url="report/filters_valid.png", description="Report filter selection" %} +{% include 'img.html' %} +{% endwith %} + +If you enter an invalid option for the filter field, an error message will be displayed: + +{% with id="report-filter-invalid", url="report/filters_invalid.png", description="Invalid filter selection" %} +{% include 'img.html' %} +{% endwith %} + +!!! warning "Advanced Users" + Report filtering is an advanced topic, and requires a little bit of knowledge of the underlying data structure! + +### Metadata + +A JSON field made available to any [plugins](../extend/plugins.md) - but not used by internal code. + +## Reporting Options + +A number of global reporting options are available for customizing InvenTree reports: + +{% with id="report-options", url="report/report.png", description="Report Options" %} +{% include 'img.html' %} +{% endwith %} + +### Enable Reports + +By default, the reporting feature is disabled. It must be enabled in the global settings. + + +### Default Page Size + +The built-in InvenTree report templates (and any reports which are derived from the built-in templates) use the *Page Size* option to set the page size of the generated reports. + +!!! info "Override Page Size" + Custom report templates do not have to make use of the *Page Size* option, although it is made available to the template context. + +### Debug Mode + +As templates are rendered directly to a PDF object, it can be difficult to debug problems when the PDF does not render exactly as expected. + +Setting the *Debug Mode* option renders the template as raw HTML instead of PDF, allowing the rendering output to be introspected. This feature allows template designers to understand any issues with the generated HTML (before it is passed to the PDF generation engine). + +!!! warning "HTML Rendering Limitations" + When rendered in debug mode, @page attributes (such as size, etc) will **not** be observed. Additionally, any asset files stored on the InvenTree server will not be rendered. Debug mode is not intended to produce "good looking" documents! + +## Report Assets + +User can upload asset files (e.g. images) which can be used when generating reports. For example, you may wish to generate a report with your company logo in the header. Asset files are uploaded via the admin interface. + +Asset files can be rendered directly into the template as follows + +```html +{% raw %} + +{% load report %} + + + + + + + + + + + + + + + +{% endraw %} +``` + +!!! warning "Asset Naming" + If the requested asset name does not match the name of an uploaded asset, the template will continue without loading the image. + +!!! info "Assets location" + You need to ensure your asset images to the report/assets directory in the [data directory](../start/intro.md#file-storage). Upload new assets via the [admin interface](../settings/admin.md) to ensure they are uploaded to the correct location on the server. + + +## Report Snippets + +A powerful feature provided by the django / WeasyPrint templating framework is the ability to include external template files. This allows commonly used template features to be broken out into separate files and re-used across multiple templates. + +To support this, InvenTree provides report "snippets" - short (or not so short) template files which cannot be rendered by themselves, but can be called from other templates. + +Similar to assets files, snippet template files are uploaded via the admin interface. + +Snippets are included in a template as follows: + +``` +{% raw %}{% include 'snippets/' %}{% endraw %} +``` + +For example, consider a stocktake report for a particular stock location, where we wish to render a table with a row for each item in that location. + +```html +{% raw %} + +
{{ item.part.full_name }}{{ item.quantity }}
+ + + + + {% for item in location.stock_items %} + {% include 'snippets/stock_row.html' with item=item %} + {% endfor %} + + +{% endraw %} +``` + +!!! info "Snippet Arguments" + Note above that named argument variables can be passed through to the snippet! + +And the snippet file `stock_row.html` may be written as follows: + +```html +{% raw %} + + + + + +{% endraw %} +``` diff --git a/docs/docs/report/test.md b/docs/docs/report/test.md deleted file mode 100644 index 7e6dcd67a2..0000000000 --- a/docs/docs/report/test.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Test Report ---- - -## Test Report - -InvenTree provides [test result](../stock/test.md) tracking functionality which allows the users to keep track of any tests which have been performed on a given [stock item](../stock/stock.md). - -Custom test reports may be generated against any given stock item. All testing data is made available to the template for custom rendering as required. - -For example, an "Acceptance Test" report template may be customized to the particular device, with the results for certain tests rendering in a particular part of the page, with any tests which have not passed highlighted. - -### Stock Item Filters - -A TestReport template may define a set of filters against which stock items are sorted. Any [StockItem](../stock/stock.md) objects which match the provided filters can use the given TestReport. - -This allows each TestReport to easily be assigned to a particular StockItem, or even multiple items. - -In the example below, a test report template is uploaded and available to any stock items linked to a part with the name *"My Widget"*. Any combination of fields relevant to the StockItem model can be used here. - -{% with id="test-report-filters", url="report/test_report_filters.png", description="Test report filters" %} -{% include 'img.html' %} -{% endwith %} - - -### Context Variables - -In addition to the default report context variables, the following context variables are made available to the TestReport template for rendering: - -| Variable | Description | -| --- | --- | -| stock_item | The individual [Stock Item](./context_variables.md#stockitem) object for which this test report is being generated | -| serial | The serial number of the linked Stock Item | -| part | The [Part](./context_variables.md#part) object of which the stock_item is an instance | -| parameters | A dict object representing the [parameters](../part/parameter.md) of the referenced part | -| test_keys | A list of the available 'keys' for the test results recorded against the stock item | -| test_template_list | A list of the available [test templates](../part/test.md#part-test-templates) for the referenced part | -| test_template_map | A map / dict of the available test templates | -| results | A dict of test result objects, where the 'key' for each test result is a shortened version of the test name (see below) | -| result_list | A list of each test result object | -| installed_items | A flattened list representing all [Stock Item](./context_variables.md#stockitem) objects which are *installed inside* the referenced [Stock Item](./context_variables.md#stockitem) object | - -#### Results - -The *results* context variable provides a very convenient method of callout out a particular test result by name. - -#### Example - -Say for example that a Part "Electronic Widget" has a stock item with serial number #123, and has a test result uploaded called "Firmware Checksum". The templated file can reference this data as follows: - -``` html -

Part: {% raw %}{{ part.name }}{% endraw %}

-Serial Number: {% raw %}{{ stock_item.serial }}{% endraw %} -
-

-Firmware Checksum: {% raw %}{{ results.firmwarechecksum.value }}. -Uploaded by {{ results.firmwarechecksum.user }}{% endraw %} -

-``` - -#### Installed Items - -The *installed_items* context variable is a list of all [StockItem](./context_variables.md#stockitem) instances which are installed inside the [StockItem](./context_variables.md#stockitem) referenced by the report template. Each [StockItem](./context_variables.md#stockitem) can be dereferenced as follows: - -```html -{% raw %} -
{{ item.part.full_name }}{{ item.quantity }}
- {% for sub_item in installed_items %} - - - - - - {% endfor %} -
{{ sub_item.full_name }}Serial Number: {{ sub_item.serial }}Pass: {{ sub_item.passedAllRequiredTests }}
-{% endraw %} -``` - -### Default Report Template - -A default *Test Report* template is provided out of the box, which is useful for generating simple test reports. Furthermore, it may be used as a starting point for developing custom test reports: - -{% with id="test-report-example", url="report/test_report_example.png", description="Example Test Report" %} -{% include "img.html" %} -{% endwith %} - -View the [source code](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/report/templates/report/inventree_test_report_base.html) for the default test report template. diff --git a/docs/docs/report/weasyprint.md b/docs/docs/report/weasyprint.md new file mode 100644 index 0000000000..e2aaaccad5 --- /dev/null +++ b/docs/docs/report/weasyprint.md @@ -0,0 +1,111 @@ +--- +title: Weasyprint Templates +--- + +## WeasyPrint Templates + +We use the powerful [WeasyPrint](https://weasyprint.org/) PDF generation engine to create custom reports and labels. + +!!! info "WeasyPrint" + WeasyPrint is an extremely powerful and flexible reporting library. Refer to the [WeasyPrint docs](https://doc.courtbouillon.org/weasyprint/stable/) for further information. + +### Stylesheets + +Templates are rendered using standard HTML / CSS - if you are familiar with web page layout, you're ready to go! + +### Template Language + +Uploaded report template files are passed through the [django template rendering framework]({% include "django.html" %}/topics/templates/), and as such accept the same variable template strings as any other django template file. Different variables are passed to the report template (based on the context of the report) and can be used to customize the contents of the generated PDF. + +### Context Variables + +!!! info "Context Variables" + Templates will have different variables available to them depending on the report type. Read the detailed information on each available report type for further information. + +Please refer to the [Context variables](./context_variables.md) page. + + +### Conditional Rendering + +The django template system allows for conditional rendering, providing conditional flow statements such as: + +``` +{% raw %} +{% if %} +{% do_something %} +{% elif %} + +{% else %} + +{% endif %} +{% endraw %} +``` + +``` +{% raw %} +{% for in %} +Item: {{ item }} +{% endfor %} +{% endraw %} +``` + +!!! info "Conditionals" + Refer to the [django template language documentation]({% include "django.html" %}/ref/templates/language/) for more information. + +### Localization Issues + +Depending on your localization scheme, inputting raw numbers into the formatting section template can cause some unintended issues. Consider the block below which specifies the page size for a rendered template: + +```html +{% raw %} + + + +{% endraw %} +``` + +If localization settings on the InvenTree server use a comma (`,`) character as a decimal separator, this may produce an output like: + +```html +{% raw %} +{% endraw %} + + + +``` + +The resulting `{% raw %} + +{% endraw %} +``` + +!!! tip "Close it out" + Don't forget to end with a `{% raw %}{% endlocalize %}{% endraw %}` tag! + +!!! tip "l10n" + You will need to add `{% raw %}{% load l10n %}{% endraw %}` to the top of your template file to use the `{% raw %}{% localize %}{% endraw %}` tag. diff --git a/docs/docs/security.md b/docs/docs/security.md index da6ddda0bb..d2f2238f38 100644 --- a/docs/docs/security.md +++ b/docs/docs/security.md @@ -8,9 +8,9 @@ To that end, we have implemented a number of security measures over the years, w 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. InvenTree is open-source, and we welcome contributions from the community. However, all contributions are reviewed and scrutinised before being merged into the codebase. -We provide a written [Security Policy](https://github.com/inventree/InvenTree/blob/master/SECURITY.md) in our main repo to ensure that all security issues are handled in a timely manner. +We provide a written [Security Policy]({{ sourcefile("SECURITY.md") }}) in our main repo to ensure that all security issues are handled in a timely manner. -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). +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 diff --git a/docs/docs/settings/currency.md b/docs/docs/settings/currency.md index 6ceb9d0d4b..4a2e7834f5 100644 --- a/docs/docs/settings/currency.md +++ b/docs/docs/settings/currency.md @@ -6,13 +6,13 @@ title: Currency Support InvenTree provides support for multiple currencies, allowing pricing information to be stored with base currency rates. -### Configuration +### Supported Currencies -To specify which currencies are supported, refer to the [currency configuration](../start/config.md#supported-currencies) section +InvenTree uses the [django-money](https://github.com/django-money/django-money) library, which in turn uses the [py-moneyed library](https://py-moneyed.readthedocs.io/en/latest/index.html). `py-moneyed` supports any currency which is defined in the [ISO 3166 standard](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes) standard. ### Currency Conversion -Currency conversion is provided via the [django-money](https://github.com/django-money/django-money) library. Pricing data can be converted seamlessly between the available currencies. +Currency conversion is provided via the `django-money` library. Pricing data can be converted seamlessly between the available currencies. ### Currency Rate Updates @@ -26,6 +26,11 @@ If a different currency exchange backend is needed, or a custom implementation i In the [settings screen](./global.md), under the *Pricing* section, the following currency settings are available: -{% with id="currency-settings", url="settings/currency.png", description="Currency Exchange Settings" %} -{% include 'img.html' %} -{% endwith %} +| Setting | Description | Default Value | +| --- | --- | +| Default Currency | The selected *default* currency for the system. | USD | +| Supported Currencies | The list of supported currencies for the system. | AUD, CAD, CNY, EUR, GBP, JPY, NZD, USD | + +#### Supported Currencies + +While InvenTree can support any of the currencies defined in the ISO 3166 standard, the list of supported currencies can be limited to only those which are relevant to the user. The supported currencies are used to populate the currency selection dropdowns throughout the InvenTree interface. diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index 7ce2e96784..98498f25fc 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -22,7 +22,11 @@ The InvenTree server tries to locate the `config.yaml` configuration file on sta !!! tip "Config File Location" When the InvenTree server boots, it will report the location where it expects to find the configuration file -The configuration file *template* can be found on [GitHub](https://github.com/inventree/InvenTree/blob/master/src/backend/InvenTree/config_template.yaml) +#### Configuration File Template + +The configuration file *template* can be found on [GitHub]({{ sourcefile("src/backend/InvenTree/config_template.yaml") }}), and is shown below: + +{{ includefile("src/backend/InvenTree/config_template.yaml", "Configuration File Template", format="yaml") }} !!! info "Template File" The default configuration file (as defined by the template linked above) will be copied to the specified configuration file location on first run, if a configuration file is not found in that location. @@ -94,12 +98,14 @@ Depending on how your InvenTree installation is configured, you will need to pay | --- | --- | --- | --- | | INVENTREE_ALLOWED_HOSTS | allowed_hosts | List of allowed hosts | `*` | | INVENTREE_TRUSTED_ORIGINS | trusted_origins | List of trusted origins. Refer to the [django documentation]({% include "django.html" %}/ref/settings/#csrf-trusted-origins) | Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list. | -| INVENTREE_CORS_ORIGIN_ALLOW_ALL | cors.allow_all | Allow all remote URLS for CORS checks | False | +| INVENTREE_CORS_ORIGIN_ALLOW_ALL | cors.allow_all | Allow all remote URLS for CORS checks | `False` | | INVENTREE_CORS_ORIGIN_WHITELIST | cors.whitelist | List of whitelisted CORS URLs. Refer to the [django-cors-headers documentation](https://github.com/adamchainz/django-cors-headers#cors_allowed_origins-sequencestr) | Uses the *INVENTREE_SITE_URL* parameter, if set. Otherwise, an empty list. | | INVENTREE_CORS_ORIGIN_REGEX | cors.regex | List of regular expressions for CORS whitelisted URL patterns | *Empty list* | -| INVENTREE_USE_X_FORWARDED_HOST | use_x_forwarded_host | Use forwarded host header | False | -| INVENTREE_USE_X_FORWARDED_PORT | use_x_forwarded_port | Use forwarded port header | False | -| INVENTREE_CORS_ALLOW_CREDENTIALS | cors.allow_credentials | Allow cookies in cross-site requests | True | +| INVENTREE_CORS_ALLOW_CREDENTIALS | cors.allow_credentials | Allow cookies in cross-site requests | `True` | +| INVENTREE_USE_X_FORWARDED_HOST | use_x_forwarded_host | Use forwarded host header | `False` | +| INVENTREE_USE_X_FORWARDED_PORT | use_x_forwarded_port | Use forwarded port header | `False` | +| INVENTREE_SESSION_COOKIE_SECURE | cookie.secure | Enforce secure session cookies | `False` | +| INVENTREE_COOKIE_SAMESITE | cookie.samesite | Session cookie mode. Must be one of `Strict | Lax | None`. Refer to the [mozilla developer docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) for more information. | `None` | ### Proxy Settings @@ -196,6 +202,35 @@ If running with a MySQL database backend, the following additional options are a | --- | --- | --- | --- | | INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | +## Caching + +InvenTree can be configured to use [redis](https://redis.io) as a global cache backend. +Enabling a global cache can provide significant performance improvements for InvenTree. + +### Cache Server + +Enabling global caching requires connection to a redis server (which is separate from the InvenTree database and web server). Setup and configuration of this server is outside the scope of this documentation. It is assumed that if you are configuring a cache server, you have already set one up, and are comfortable configuring it. + +!!! tip "Docker Support" + If you are running [InvenTree under docker](./docker.md), we provide a redis container as part of our docker compose file - so redis caching works out of the box. + +### Cache Settings + +The following cache settings are available: + +| Environment Variable | Configuration File | Description | Default | +| --- | --- | --- | --- | +| INVENTREE_CACHE_ENABLED | cache.enabled | Enable redis caching | False | +| INVENTREE_CACHE_HOST | cache.host | Cache server host | *Not specified* | +| INVENTREE_CACHE_PORT | cache.port | Cache server port | 6379 | +| INVENTREE_CACHE_CONNECT_TIMEOUT | cache.connect_timeout | Cache connection timeout (seconds) | 3 | +| INVENTREE_CACHE_TIMEOUT | cache.timeout | Cache timeout (seconds) | 3 | +| INVENTREE_CACHE_TCP_KEEPALIVE | cache.tcp_keepalive | Cache TCP keepalive | True | +| INVENTREE_CACHE_KEEPALIVE_COUNT | cache.keepalive_count | Cache keepalive count | 5 | +| INVENTREE_CACHE_KEEPALIVE_IDLE | cache.keepalive_idle | Cache keepalive idle | 1 | +| INVENTREE_CACHE_KEEPALIVE_INTERVAL | cache.keepalive_interval | Cache keepalive interval | 1 | +| INVENTREE_CACHE_USER_TIMEOUT | cache.user_timeout | Cache user timeout | 1000 | + ## Email Settings To enable [email functionality](../settings/email.md), email settings must be configured here, either via environment variables or within the configuration file. @@ -221,19 +256,6 @@ The "sender" email address is the address from which InvenTree emails are sent ( !!! info "Fallback" If `INVENTREE_EMAIL_SENDER` is not provided, the system will fall back to `INVENTREE_EMAIL_USERNAME` (if the username is a valid email address) -## Supported Currencies - -The currencies supported by InvenTree must be specified in the [configuration file](#configuration-file). - -A list of currency codes (e.g. *AUD*, *CAD*, *JPY*, *USD*) can be specified using the `currencies` variable (or using the `INVENTREE_CURRENCIES` environment variable). - -| Environment Variable | Configuration File | Description | Default | -| --- | --- | --- | --- | -| INVENTREE_CURRENCIES | currencies | List of supported currencies| `AUD`, `CAD`, `CNY`, `EUR`, `GBP`, `JPY`, `NZD`, `USD` | - -!!! tip "More Info" - Read the [currencies documentation](../settings/currency.md) for more information on currency support in InvenTree - ## File Storage Locations InvenTree requires some external directories for storing files: @@ -324,6 +346,7 @@ The logo and custom messages can be changed/set: | INVENTREE_CUSTOM_SPLASH | customize.splash | Path to custom splash screen in the static files directory | *Not specified* | | INVENTREE_CUSTOMIZE | customize.login_message | Custom message for login page | *Not specified* | | INVENTREE_CUSTOMIZE | customize.navbar_message | Custom message for navbar | *Not specified* | +| INVENTREE_CUSTOMIZE | customize.hide_pui_banner | Disable PUI banner | False | If you want to remove the InvenTree branding as far as possible from your end-user also check the [global server settings](../settings/global.md#server-settings). diff --git a/docs/docs/start/docker.md b/docs/docs/start/docker.md index 4a3e3458d3..7ab8c88563 100644 --- a/docs/docs/start/docker.md +++ b/docs/docs/start/docker.md @@ -117,12 +117,15 @@ Runs an InvenTree web server instance, powered by a Gunicorn web server. Runs the InvenTree background worker process. This spins up a second instance of the *inventree* container, with a different entrypoint command. -#### File Server +#### Proxy Server Caddy working as a reverse proxy, separating requests for static and media files, and directing everything else to Gunicorn. This container uses the official [caddy image](https://hub.docker.com/_/caddy). +!!! info "Nginx Proxy" + An alternative is to run nginx as the reverse proxy. A sample configuration file is provided in the `./contrib/container/` source directory. + #### Redis Cache Redis is used as cache storage for the InvenTree server. This provides a more performant caching system which can useful in larger installations. @@ -133,10 +136,8 @@ This container uses the official [redis image](https://hub.docker.com/_/redis). Docker adds an additional network layer - that might lead to lower performance than bare metal. To optimize and configure your redis deployment follow the [official docker guide](https://redis.io/docs/getting-started/install-stack/docker/#configuration). -!!! warning "Disabled by default" - The *redis* container is not enabled in the default configuration. This is provided as an example for users wishing to use redis. - To enable the *redis* container, run any `docker compose` commands with the `--profile redis` flag. - You will also need to un-comment the `INVENTREE_CACHE_<...>` variables in the `.env` file. +!!! tip "Enable Cache" + While a redis container is provided in the default configuration, by default it is not enabled in the Inventree server. You can enable redis cache support by following the [caching configuration guide](./config.md#caching) ### Data Volume diff --git a/docs/docs/start/docker_install.md b/docs/docs/start/docker_install.md index 099588d6b7..b2384c4df5 100644 --- a/docs/docs/start/docker_install.md +++ b/docs/docs/start/docker_install.md @@ -27,13 +27,13 @@ The following guide provides a streamlined production InvenTree installation, wi ### Required Files -The following files required for this setup are provided with the InvenTree source, located in the `/contrib/container/` directory of the [InvenTree source code](https://github.com/inventree/InvenTree/tree/master/contrib/container/): +The following files required for this setup are provided with the InvenTree source, located in the `contrib/container/` directory of the [InvenTree source code]({{ sourcedir("/contrib/container/") }}): | Filename | Description | | --- | --- | -| [docker-compose.yml](https://raw.githubusercontent.com/inventree/InvenTree/master/contrib/container/docker-compose.yml)| The docker compose script | -| [.env](https://raw.githubusercontent.com/inventree/InvenTree/master/contrib/container/.env) | Environment variables | -| [Caddyfile](https://raw.githubusercontent.com/inventree/InvenTree/master/contrib/container/Caddyfile) | Caddy configuration file | +| [docker-compose.yml]({{ sourcefile("contrib/container/docker-compose.yml", raw=True) }}) | The docker compose script | +| [.env]({{ sourcefile("contrib/container/.env", raw=True) }}) | Environment variables | +| [Caddyfile]({{ sourcefile("contrib/container/Caddyfile", raw=True) }}) | Caddy configuration file | Download these files to a directory on your local machine. diff --git a/docs/docs/start/install.md b/docs/docs/start/install.md index 0067dac7a3..3b1bd6ed92 100644 --- a/docs/docs/start/install.md +++ b/docs/docs/start/install.md @@ -23,7 +23,7 @@ Install required system packages (as superuser): The following packages are required on a debian system. A different distribution may require a slightly different set of packages !!! info "Python Version" - InvenTree requires a modern Python version check [here](https://github.com/inventree/InvenTree/blob/master/CONTRIBUTING.md#target-version) for the current minimums. + InvenTree requires a modern Python version [check here]({{ sourcefile("CONTRIBUTING.md") }}) for the current minimums. ``` sudo apt-get update @@ -107,7 +107,7 @@ source ./env/bin/activate The Python packages required by the InvenTree server must be installed into the virtual environment. ``` -pip install -U -r src/requirements.txt +pip install --require-hashes -U -r src/backend/requirements.txt ``` This installs all required Python packages using pip package manager. It also creates a (default) database configuration file which needs to be edited to meet user needs before proceeding (see next step below). diff --git a/docs/docs/start/installer.md b/docs/docs/start/installer.md index 721a30fbed..295766e331 100644 --- a/docs/docs/start/installer.md +++ b/docs/docs/start/installer.md @@ -15,6 +15,14 @@ wget -qO install.sh https://get.inventree.org && bash install.sh This script does all manual steps without any input. The installation might take up to 5-10 minutes to finish. +#### Permission Denied Error + +The above command may need to be run with `sudo` permissions, depending on the system configuration. So, if the script fails with a permission error, try: + +```bash +sudo wget -qO install.sh https://get.inventree.org && sudo bash install.sh +``` + ### File Locations The installer creates the following directories: @@ -171,4 +179,4 @@ The packages are provided by [packager.io](https://packager.io/). They are built The package sets up [services](#controlling-inventree) that run the needed processes as the unprivileged user `inventree`. This keeps the privileges of InvenTree as low as possible. -A CLI is provided to interface with low-level management functions like [variable management](#enviroment-variables), log access, commands, process scaling, etc. +A CLI is provided to interface with low-level management functions like [variable management](#environment-variables), log access, commands, process scaling, etc. diff --git a/docs/docs/start/intro.md b/docs/docs/start/intro.md index 5b733cd5a0..9b3253aab8 100644 --- a/docs/docs/start/intro.md +++ b/docs/docs/start/intro.md @@ -84,6 +84,12 @@ To display a list of the available InvenTree administration actions, run the fol invoke --list ``` +This provides a list of the available invoke commands - also displayed below: + +``` +{{ invoke_commands() }} +``` + ### Virtual Environment Installing the required Python packages inside a virtual environment allows a local install separate to the system-wide Python installation. While not strictly necessary, using a virtual environment is **highly recommended** as it prevents conflicts between the different Python installations. diff --git a/docs/docs/stock/status.md b/docs/docs/stock/status.md index 42e5bffe32..3ae6f12823 100644 --- a/docs/docs/stock/status.md +++ b/docs/docs/stock/status.md @@ -26,6 +26,18 @@ The *status* of a given stock item is displayed on the stock item detail page: {% include 'img.html' %} {% endwith %} +**Source Code** + +Refer to the source code for the Stock status codes: + +::: stock.status_codes.StockStatus + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + ### Default Status Code The default status code for any newly created Stock Item is OK diff --git a/docs/main.py b/docs/main.py index ad5c2fe75a..78a4339315 100644 --- a/docs/main.py +++ b/docs/main.py @@ -1,11 +1,154 @@ """Main entry point for the documentation build process.""" import os +import subprocess +import textwrap + +import requests +import yaml + + +def get_repo_url(raw=False): + """Return the repository URL for the current project.""" + mkdocs_yml = os.path.join(os.path.dirname(__file__), 'mkdocs.yml') + + with open(mkdocs_yml, 'r') as f: + mkdocs_config = yaml.safe_load(f) + repo_name = mkdocs_config['repo_name'] + + if raw: + return f'https://raw.githubusercontent.com/{repo_name}' + else: + return f'https://github.com/{repo_name}' + + +def check_link(url) -> bool: + """Check that a provided URL is valid. + + We allow a number attempts and a lengthy timeout, + as we do not want false negatives. + """ + CACHE_FILE = os.path.join(os.path.dirname(__file__), 'url_cache.txt') + + # Keep a local cache file of URLs we have already checked + if os.path.exists(CACHE_FILE): + with open(CACHE_FILE, 'r') as f: + cache = f.read().splitlines() + + if url in cache: + return True + + attempts = 5 + + while attempts > 0: + response = requests.head(url, timeout=5000) + if response.status_code == 200: + # Update the cache file + with open(CACHE_FILE, 'a') as f: + f.write(f'{url}\n') + + return True + + attempts -= 1 + + return False def define_env(env): """Define custom environment variables for the documentation build process.""" + @env.macro + def sourcedir(dirname, branch='master'): + """Return a link to a directory within the source code repository. + + Arguments: + - dirname: The name of the directory to link to (relative to the top-level directory) + + Returns: + - A fully qualified URL to the source code directory on GitHub + + Raises: + - FileNotFoundError: If the directory does not exist, or the generated URL is invalid + """ + if dirname.startswith('/'): + dirname = dirname[1:] + + # This file exists at ./docs/main.py, so any directory we link to must be relative to the top-level directory + here = os.path.dirname(__file__) + root = os.path.abspath(os.path.join(here, '..')) + + directory = os.path.join(root, dirname) + directory = os.path.abspath(directory) + + if not os.path.exists(directory) or not os.path.isdir(directory): + raise FileNotFoundError(f'Source directory {dirname} does not exist.') + + repo_url = get_repo_url() + + url = f'{repo_url}/tree/{branch}/{dirname}' + + # Check that the URL exists before returning it + if not check_link(url): + raise FileNotFoundError(f'URL {url} does not exist.') + + return url + + @env.macro + def sourcefile(filename, branch='master', raw=False): + """Return a link to a file within the source code repository. + + Arguments: + - filename: The name of the file to link to (relative to the top-level directory) + + Returns: + - A fully qualified URL to the source code file on GitHub + + Raises: + - FileNotFoundError: If the file does not exist, or the generated URL is invalid + """ + if filename.startswith('/'): + filename = filename[1:] + + # This file exists at ./docs/main.py, so any file we link to must be relative to the top-level directory + here = os.path.dirname(__file__) + root = os.path.abspath(os.path.join(here, '..')) + + file_path = os.path.join(root, filename) + + if not os.path.exists(file_path): + raise FileNotFoundError(f'Source file {filename} does not exist.') + + repo_url = get_repo_url(raw=raw) + + if raw: + url = f'{repo_url}/{branch}/{filename}' + else: + url = f'{repo_url}/blob/{branch}/{filename}' + + # Check that the URL exists before returning it + if not check_link(url): + raise FileNotFoundError(f'URL {url} does not exist.') + + return url + + @env.macro + def invoke_commands(): + """Provides an output of the available commands.""" + here = os.path.dirname(__file__) + base = os.path.join(here, '..') + base = os.path.abspath(base) + tasks = os.path.join(base, 'tasks.py') + output = os.path.join(here, 'invoke-commands.txt') + + command = f'invoke -f {tasks} --list > {output}' + + assert subprocess.call(command, shell=True) == 0 + + with open(output, 'r') as f: + content = f.read() + + return content + @env.macro def listimages(subdir): """Return a listing of all asset files in the provided subdir.""" @@ -22,3 +165,39 @@ def define_env(env): assets.append(os.path.join(subdir, asset)) return assets + + @env.macro + def includefile(filename: str, title: str, format: str = ''): + """Include a file in the documentation, in a 'collapse' block. + + Arguments: + - filename: The name of the file to include (relative to the top-level directory) + - title: + """ + here = os.path.dirname(__file__) + path = os.path.join(here, '..', filename) + path = os.path.abspath(path) + + if not os.path.exists(path): + raise FileNotFoundError(f'Required file {path} does not exist.') + + with open(path, 'r') as f: + content = f.read() + + data = f'??? abstract "{title}"\n\n' + data += f' ```{format}\n' + data += textwrap.indent(content, ' ') + data += '\n\n' + data += ' ```\n\n' + + return data + + @env.macro + def templatefile(filename): + """Include code for a provided template file.""" + base = os.path.basename(filename) + fn = os.path.join( + 'src', 'backend', 'InvenTree', 'report', 'templates', filename + ) + + return includefile(fn, f'Template: {base}', format='html') diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index c02a03896a..14c8ddd832 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -135,25 +135,15 @@ nav: - Return Orders: order/return_order.md - Project Codes: order/project_codes.md - Report: - - Templates: report/report.md + - Templates: report/templates.md + - Template Rendering: report/weasyprint.md - Template Editor: report/template_editor.md - - Report Types: - - Test Reports: report/test.md - - Build Order: report/build.md - - Purchase Order: report/purchase_order.md - - Sales Order: report/sales_order.md - - Return Order: report/return_order.md - - BOM: report/bom.md - - Stock Location: report/stock_location.md - - Labels: - - Custom Labels: report/labels.md - - Part Labels: report/labels/part_labels.md - - Stock Labels: report/labels/stock_labels.md - - Location Labels: report/labels/location_labels.md - - Build Labels: report/labels/build_labels.md + - Reports: report/report.md + - Labels: report/labels.md + - Context Variables: report/context_variables.md - Helper Functions: report/helpers.md - Barcodes: report/barcodes.md - - Context Variables: report/context_variables.md + - Sample Templates: report/samples.md - Admin: - Global Settings: settings/global.md - User Settings: settings/user.md @@ -241,6 +231,7 @@ plugins: on_config: "docs.docs.hooks:on_config" - macros: include_dir: docs/_includes + module_name: main - mkdocstrings: default_handler: python handlers: @@ -250,6 +241,8 @@ plugins: options: show_symbol_type_heading: true show_symbol_type_toc: true + show_root_heading: false + show_root_toc_entry: false # Extensions markdown_extensions: diff --git a/docs/requirements.in b/docs/requirements.in new file mode 100644 index 0000000000..a2442f3814 --- /dev/null +++ b/docs/requirements.in @@ -0,0 +1,8 @@ +mkdocs==1.6.0 +mkdocs-macros-plugin>=0.7,<2.0 +mkdocs-material>=9.0,<10.0 +mkdocs-git-revision-date-localized-plugin>=1.1,<2.0 +mkdocs-simple-hooks>=0.1,<1.0 +mkdocs-include-markdown-plugin +neoteroi-mkdocs +mkdocstrings[python]>=0.25.0 diff --git a/docs/requirements.txt b/docs/requirements.txt index 8b642f39da..1fe63ba3e3 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,8 +1,590 @@ -mkdocs==1.5.3 -mkdocs-macros-plugin>=0.7,<2.0 -mkdocs-material>=9.0,<10.0 -mkdocs-git-revision-date-localized-plugin>=1.1,<2.0 -mkdocs-simple-hooks>=0.1,<1.0 -mkdocs-include-markdown-plugin -neoteroi-mkdocs -mkdocstrings[python]>=0.24.0 +# This file was autogenerated by uv via the following command: +# uv pip compile docs/requirements.in -o docs/requirements.txt --python-version=3.9 --no-strip-extras --generate-hashes +anyio==4.3.0 \ + --hash=sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8 \ + --hash=sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6 + # via httpx +babel==2.15.0 \ + --hash=sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb \ + --hash=sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413 + # via + # mkdocs-git-revision-date-localized-plugin + # mkdocs-material +bracex==2.4 \ + --hash=sha256:a27eaf1df42cf561fed58b7a8f3fdf129d1ea16a81e1fadd1d17989bc6384beb \ + --hash=sha256:efdc71eff95eaff5e0f8cfebe7d01adf2c8637c8c92edaf63ef348c241a82418 + # via wcmatch +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 + # via + # httpcore + # httpx + # requests +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + # via requests +click==8.1.7 \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de + # via + # mkdocs + # mkdocstrings + # neoteroi-mkdocs +colorama==0.4.6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + # via + # griffe + # mkdocs-material +essentials==1.1.5 \ + --hash=sha256:8736f738bb2c51d5069b2de2cf9146f7d402f25f9f95636781e59a422c908c46 \ + --hash=sha256:905fa4a69fcd2b2cf41ecc6cc65827e30c87ef91f3f5c71540bcc5e984fa8360 + # via essentials-openapi +essentials-openapi==1.0.9 \ + --hash=sha256:1431e98ef0a442f1919fd9833385bf44d832c355fd05919dc06d43d4da0f8ef4 \ + --hash=sha256:ebc46aac41c0b917a658f77caaa0ca93a6e4a4519de8a272f82c1538ccd5619f + # via neoteroi-mkdocs +exceptiongroup==1.2.1 \ + --hash=sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad \ + --hash=sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16 + # via anyio +ghp-import==2.1.0 \ + --hash=sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619 \ + --hash=sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343 + # via mkdocs +gitdb==4.0.11 \ + --hash=sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4 \ + --hash=sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b + # via gitpython +gitpython==3.1.43 \ + --hash=sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c \ + --hash=sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff + # via mkdocs-git-revision-date-localized-plugin +griffe==0.45.1 \ + --hash=sha256:12194c10ae07a7f46708741ad78419362cf8e5c883f449c7c48de1686611b853 \ + --hash=sha256:84ce9243a9e63c07d55563a735a0d07ef70b46c455616c174010e7fc816f4648 + # via mkdocstrings-python +h11==0.14.0 \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 + # via httpcore +httpcore==1.0.5 \ + --hash=sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61 \ + --hash=sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5 + # via httpx +httpx==0.27.0 \ + --hash=sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5 \ + --hash=sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5 + # via neoteroi-mkdocs +idna==3.7 \ + --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ + --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 + # via + # anyio + # httpx + # requests +importlib-metadata==7.1.0 \ + --hash=sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570 \ + --hash=sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2 + # via + # markdown + # mkdocs + # mkdocs-get-deps + # mkdocstrings +jinja2==3.1.4 \ + --hash=sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369 \ + --hash=sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d + # via + # mkdocs + # mkdocs-macros-plugin + # mkdocs-material + # mkdocstrings + # neoteroi-mkdocs +markdown==3.6 \ + --hash=sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f \ + --hash=sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224 + # via + # mkdocs + # mkdocs-autorefs + # mkdocs-material + # mkdocstrings + # pymdown-extensions +markdown-it-py==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb + # via rich +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 + # via + # essentials-openapi + # jinja2 + # mkdocs + # mkdocs-autorefs + # mkdocstrings +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +mergedeep==1.3.4 \ + --hash=sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8 \ + --hash=sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307 + # via + # mkdocs + # mkdocs-get-deps +mkdocs==1.6.0 \ + --hash=sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7 \ + --hash=sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512 + # via + # mkdocs-autorefs + # mkdocs-git-revision-date-localized-plugin + # mkdocs-include-markdown-plugin + # mkdocs-macros-plugin + # mkdocs-material + # mkdocs-simple-hooks + # mkdocstrings + # neoteroi-mkdocs +mkdocs-autorefs==1.0.1 \ + --hash=sha256:aacdfae1ab197780fb7a2dac92ad8a3d8f7ca8049a9cbe56a4218cd52e8da570 \ + --hash=sha256:f684edf847eced40b570b57846b15f0bf57fb93ac2c510450775dcf16accb971 + # via mkdocstrings +mkdocs-get-deps==0.2.0 \ + --hash=sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c \ + --hash=sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134 + # via mkdocs +mkdocs-git-revision-date-localized-plugin==1.2.5 \ + --hash=sha256:0c439816d9d0dba48e027d9d074b2b9f1d7cd179f74ba46b51e4da7bb3dc4b9b \ + --hash=sha256:d796a18b07cfcdb154c133e3ec099d2bb5f38389e4fd54d3eb516a8a736815b8 +mkdocs-include-markdown-plugin==6.0.6 \ + --hash=sha256:7c80258b2928563c75cc057a7b9a0014701c40804b1b6aa290f3b4032518b43c \ + --hash=sha256:7ccafbaa412c1e5d3510c4aff46d1fe64c7a810c01dace4c636253d1aa5bc193 +mkdocs-macros-plugin==1.0.5 \ + --hash=sha256:f60e26f711f5a830ddf1e7980865bf5c0f1180db56109803cdd280073c1a050a \ + --hash=sha256:fe348d75f01c911f362b6d998c57b3d85b505876dde69db924f2c512c395c328 +mkdocs-material==9.5.24 \ + --hash=sha256:02d5aaba0ee755e707c3ef6e748f9acb7b3011187c0ea766db31af8905078a34 \ + --hash=sha256:e12cd75954c535b61e716f359cf2a5056bf4514889d17161fdebd5df4b0153c6 +mkdocs-material-extensions==1.3.1 \ + --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ + --hash=sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31 + # via mkdocs-material +mkdocs-simple-hooks==0.1.5 \ + --hash=sha256:dddbdf151a18723c9302a133e5cf79538be8eb9d274e8e07d2ac3ac34890837c \ + --hash=sha256:efeabdbb98b0850a909adee285f3404535117159d5cb3a34f541d6eaa644d50a +mkdocstrings[python]==0.25.1 \ + --hash=sha256:c3a2515f31577f311a9ee58d089e4c51fc6046dbd9e9b4c3de4c3194667fe9bf \ + --hash=sha256:da01fcc2670ad61888e8fe5b60afe9fee5781017d67431996832d63e887c2e51 + # via mkdocstrings-python +mkdocstrings-python==1.10.2 \ + --hash=sha256:38a4fd41953defb458a107033440c229c7e9f98f35a24e84d888789c97da5a63 \ + --hash=sha256:e8e596b37f45c09b67bec253e035fe18988af5bbbbf44e0ccd711742eed750e5 + # via mkdocstrings +neoteroi-mkdocs==1.0.5 \ + --hash=sha256:1f3b372dee79269157361733c0f45b3a89189077078e0e3224d829a144ef3579 \ + --hash=sha256:29875ef444b08aec5619a384142e16f1b4e851465cab4e380fb2b8ae730fe046 +packaging==24.0 \ + --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ + --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 + # via mkdocs +paginate==0.5.6 \ + --hash=sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d + # via mkdocs-material +pathspec==0.12.1 \ + --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ + --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 + # via mkdocs +platformdirs==4.2.2 \ + --hash=sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee \ + --hash=sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3 + # via + # mkdocs-get-deps + # mkdocstrings +pygments==2.18.0 \ + --hash=sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199 \ + --hash=sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a + # via + # mkdocs-material + # rich +pymdown-extensions==10.8.1 \ + --hash=sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940 \ + --hash=sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb + # via + # mkdocs-material + # mkdocstrings +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + # via + # ghp-import + # mkdocs-macros-plugin +pytz==2024.1 \ + --hash=sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812 \ + --hash=sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319 + # via mkdocs-git-revision-date-localized-plugin +pyyaml==6.0.1 \ + --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ + --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ + --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f + # via + # essentials-openapi + # mkdocs + # mkdocs-get-deps + # mkdocs-macros-plugin + # pymdown-extensions + # pyyaml-env-tag +pyyaml-env-tag==0.1 \ + --hash=sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb \ + --hash=sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069 + # via mkdocs +regex==2024.5.15 \ + --hash=sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649 \ + --hash=sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35 \ + --hash=sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb \ + --hash=sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68 \ + --hash=sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5 \ + --hash=sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133 \ + --hash=sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0 \ + --hash=sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d \ + --hash=sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da \ + --hash=sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f \ + --hash=sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d \ + --hash=sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53 \ + --hash=sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa \ + --hash=sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a \ + --hash=sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890 \ + --hash=sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67 \ + --hash=sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c \ + --hash=sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2 \ + --hash=sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced \ + --hash=sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741 \ + --hash=sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f \ + --hash=sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa \ + --hash=sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf \ + --hash=sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4 \ + --hash=sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5 \ + --hash=sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2 \ + --hash=sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384 \ + --hash=sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7 \ + --hash=sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014 \ + --hash=sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704 \ + --hash=sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5 \ + --hash=sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2 \ + --hash=sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49 \ + --hash=sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1 \ + --hash=sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694 \ + --hash=sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629 \ + --hash=sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6 \ + --hash=sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435 \ + --hash=sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c \ + --hash=sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835 \ + --hash=sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e \ + --hash=sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201 \ + --hash=sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62 \ + --hash=sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5 \ + --hash=sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16 \ + --hash=sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f \ + --hash=sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1 \ + --hash=sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f \ + --hash=sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f \ + --hash=sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145 \ + --hash=sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3 \ + --hash=sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed \ + --hash=sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143 \ + --hash=sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca \ + --hash=sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9 \ + --hash=sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa \ + --hash=sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850 \ + --hash=sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80 \ + --hash=sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe \ + --hash=sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656 \ + --hash=sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388 \ + --hash=sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1 \ + --hash=sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294 \ + --hash=sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3 \ + --hash=sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d \ + --hash=sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b \ + --hash=sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40 \ + --hash=sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600 \ + --hash=sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c \ + --hash=sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569 \ + --hash=sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456 \ + --hash=sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9 \ + --hash=sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb \ + --hash=sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e \ + --hash=sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f \ + --hash=sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d \ + --hash=sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a \ + --hash=sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a \ + --hash=sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796 + # via mkdocs-material +requests==2.32.2 \ + --hash=sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289 \ + --hash=sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c + # via mkdocs-material +rich==13.7.1 \ + --hash=sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222 \ + --hash=sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432 + # via neoteroi-mkdocs +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via python-dateutil +smmap==5.0.1 \ + --hash=sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62 \ + --hash=sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da + # via gitdb +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc + # via + # anyio + # httpx +termcolor==2.4.0 \ + --hash=sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63 \ + --hash=sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a + # via mkdocs-macros-plugin +typing-extensions==4.11.0 \ + --hash=sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0 \ + --hash=sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a + # via + # anyio + # mkdocstrings +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 + # via requests +watchdog==4.0.0 \ + --hash=sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257 \ + --hash=sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca \ + --hash=sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b \ + --hash=sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85 \ + --hash=sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b \ + --hash=sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19 \ + --hash=sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50 \ + --hash=sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92 \ + --hash=sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269 \ + --hash=sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f \ + --hash=sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c \ + --hash=sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b \ + --hash=sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87 \ + --hash=sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b \ + --hash=sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b \ + --hash=sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8 \ + --hash=sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c \ + --hash=sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3 \ + --hash=sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7 \ + --hash=sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605 \ + --hash=sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935 \ + --hash=sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b \ + --hash=sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927 \ + --hash=sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101 \ + --hash=sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07 \ + --hash=sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec \ + --hash=sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4 \ + --hash=sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245 \ + --hash=sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d + # via mkdocs +wcmatch==8.5.2 \ + --hash=sha256:17d3ad3758f9d0b5b4dedc770b65420d4dac62e680229c287bf24c9db856a478 \ + --hash=sha256:a70222b86dea82fb382dd87b73278c10756c138bd6f8f714e2183128887b9eb2 + # via mkdocs-include-markdown-plugin +zipp==3.18.2 \ + --hash=sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059 \ + --hash=sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e + # via importlib-metadata diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index 58aadfb81c..c3c0db4af2 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -8,6 +8,7 @@ from pathlib import Path from django.conf import settings from django.db import transaction from django.http import JsonResponse +from django.urls import include, path from django.utils.translation import gettext_lazy as _ from django_q.models import OrmQ @@ -73,8 +74,24 @@ class LicenseView(APIView): logger.exception("Exception while reading license file '%s': %s", path, e) return [] - # Ensure consistent string between backend and frontend licenses - return [{key.lower(): value for key, value in entry.items()} for entry in data] + output = [] + names = set() + + # Ensure we do not have any duplicate 'name' values in the list + for entry in data: + name = None + for key in entry.keys(): + if key.lower() == 'name': + name = entry[key] + break + + if name is None or name in names: + continue + + names.add(name) + output.append({key.lower(): value for key, value in entry.items()}) + + return output @extend_schema(responses={200: OpenApiResponse(response=LicenseViewSerializer)}) def get(self, request, *args, **kwargs): @@ -534,6 +551,10 @@ class MetadataView(RetrieveUpdateAPI): """Return the model type associated with this API instance.""" model = self.kwargs.get(self.MODEL_REF, None) + if 'lookup_field' in self.kwargs: + # Set custom lookup field (instead of default 'pk' value) if supplied + self.lookup_field = self.kwargs.pop('lookup_field') + if model is None: raise ValidationError( f"MetadataView called without '{self.MODEL_REF}' parameter" diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 5f43e0305c..be2e321f6e 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,10 +1,52 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 192 +INVENTREE_API_VERSION = 205 + """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v205 - 2024-06-03 : https://github.com/inventree/InvenTree/pull/7284 + - Added model_type and model_id fields to the "NotesImage" serializer + +v204 - 2024-06-03 : https://github.com/inventree/InvenTree/pull/7393 + - Fixes previous API update which resulted in inconsistent ordering of currency codes + +v203 - 2024-06-03 : https://github.com/inventree/InvenTree/pull/7390 + - Currency codes are now configurable as a run-time setting + +v202 - 2024-05-27 : https://github.com/inventree/InvenTree/pull/7343 + - Adjust "required" attribute of Part.category field to be optional + +v201 - 2024-05-21 : https://github.com/inventree/InvenTree/pull/7074 + - Major refactor of the report template / report printing interface + - This is a *breaking change* to the report template API + +v200 - 2024-05-20 : https://github.com/inventree/InvenTree/pull/7000 + - Adds API endpoint for generating custom batch codes + - Adds API endpoint for generating custom serial numbers + +v199 - 2024-05-20 : https://github.com/inventree/InvenTree/pull/7264 + - Expose "bom_valid" filter for the Part API + - Expose "starred" filter for the Part API + +v198 - 2024-05-19 : https://github.com/inventree/InvenTree/pull/7258 + - Fixed lookup field conflicts in the plugins API + +v197 - 2024-05-14 : https://github.com/inventree/InvenTree/pull/7224 + - Refactor the plugin API endpoints to use the plugin "key" for lookup, rather than the PK value + +v196 - 2024-05-05 : https://github.com/inventree/InvenTree/pull/7160 + - Adds "location" field to BuildOutputComplete API endpoint + +v195 - 2024-05-03 : https://github.com/inventree/InvenTree/pull/7153 + - Fixes bug in BuildOrderCancel API endpoint + +v194 - 2024-05-01 : https://github.com/inventree/InvenTree/pull/7147 + - Adds field description to the currency_exchange_retrieve API call + +v193 - 2024-04-30 : https://github.com/inventree/InvenTree/pull/7144 + - Adds "assigned_to" filter to PurchaseOrder / SalesOrder / ReturnOrder API endpoints v192 - 2024-04-23 : https://github.com/inventree/InvenTree/pull/7106 - Adds 'trackable' ordering option to BuildLineLabel API endpoint diff --git a/src/backend/InvenTree/InvenTree/apps.py b/src/backend/InvenTree/InvenTree/apps.py index 2e90780efa..d4ecadeaf4 100644 --- a/src/backend/InvenTree/InvenTree/apps.py +++ b/src/backend/InvenTree/InvenTree/apps.py @@ -74,6 +74,7 @@ class InvenTreeConfig(AppConfig): obsolete = [ 'InvenTree.tasks.delete_expired_sessions', 'stock.tasks.delete_old_stock_items', + 'label.tasks.cleanup_old_label_outputs', ] try: @@ -83,7 +84,14 @@ class InvenTreeConfig(AppConfig): # Remove any existing obsolete tasks try: - Schedule.objects.filter(func__in=obsolete).delete() + obsolete_tasks = Schedule.objects.filter(func__in=obsolete) + + if obsolete_tasks.exists(): + logger.info( + 'Removing %s obsolete background tasks', obsolete_tasks.count() + ) + obsolete_tasks.delete() + except Exception: logger.exception('Failed to remove obsolete tasks - database not ready') @@ -177,7 +185,7 @@ class InvenTreeConfig(AppConfig): try: from djmoney.contrib.exchange.models import ExchangeBackend - from common.settings import currency_code_default + from common.currency import currency_code_default from InvenTree.tasks import update_exchange_rates except AppRegistryNotReady: # pragma: no cover pass diff --git a/src/backend/InvenTree/InvenTree/cache.py b/src/backend/InvenTree/InvenTree/cache.py new file mode 100644 index 0000000000..89765f5e80 --- /dev/null +++ b/src/backend/InvenTree/InvenTree/cache.py @@ -0,0 +1,101 @@ +"""Configuration options for InvenTree external cache.""" + +import logging +import socket + +import InvenTree.config +import InvenTree.ready + +logger = logging.getLogger('inventree') + + +def cache_setting(name, default=None, **kwargs): + """Return a cache setting.""" + return InvenTree.config.get_setting( + f'INVENTREE_CACHE_{name.upper()}', f'cache.{name.lower()}', default, **kwargs + ) + + +def cache_host(): + """Return the cache host address.""" + return cache_setting('host', None) + + +def cache_port(): + """Return the cache port.""" + return cache_setting('port', '6379', typecast=int) + + +def is_global_cache_enabled(): + """Check if the global cache is enabled. + + - Test if the user has enabled and configured global cache + - Test if it is appropriate to enable global cache based on the current operation. + """ + host = cache_host() + + # Test if cache is enabled + # If the cache host is set, then the "default" action is to enable the cache + if not cache_setting('enabled', host is not None, typecast=bool): + return False + + # Test if the cache is configured + if not cache_host(): + logger.warning('Global cache is enabled, but no cache host is configured!') + return False + + # The cache should not be used during certain operations + if not InvenTree.ready.canAppAccessDatabase( + allow_test=False, allow_plugins=False, allow_shell=True + ): + logger.info('Global cache bypassed for this operation') + return False + + logger.info('Global cache enabled') + + return True + + +def get_cache_config(global_cache: bool) -> dict: + """Return the cache configuration options. + + Args: + global_cache: True if the global cache is enabled. + + Returns: + A dictionary containing the cache configuration options. + """ + if global_cache: + return { + 'BACKEND': 'django_redis.cache.RedisCache', + 'LOCATION': f'redis://{cache_host()}:{cache_port()}/0', + 'OPTIONS': { + 'CLIENT_CLASS': 'django_redis.client.DefaultClient', + 'SOCKET_CONNECT_TIMEOUT': cache_setting( + 'connect_timeout', 5, typecast=int + ), + 'SOCKET_TIMEOUT': cache_setting('timeout', 3, typecast=int), + 'CONNECTION_POOL_KWARGS': { + 'socket_keepalive': cache_setting( + 'tcp_keepalive', True, typecast=bool + ), + 'socket_keepalive_options': { + socket.TCP_KEEPCNT: cache_setting( + 'keepalive_count', 5, typecast=int + ), + socket.TCP_KEEPIDLE: cache_setting( + 'keepalive_idle', 1, typecast=int + ), + socket.TCP_KEEPINTVL: cache_setting( + 'keepalive_interval', 1, typecast=int + ), + socket.TCP_USER_TIMEOUT: cache_setting( + 'user_timeout', 1000, typecast=int + ), + }, + }, + }, + } + + # Default: Use django local memory cache + return {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'} diff --git a/src/backend/InvenTree/InvenTree/exchange.py b/src/backend/InvenTree/InvenTree/exchange.py index 88584b43cc..2b118b696e 100644 --- a/src/backend/InvenTree/InvenTree/exchange.py +++ b/src/backend/InvenTree/InvenTree/exchange.py @@ -7,7 +7,7 @@ from django.db.transaction import atomic from djmoney.contrib.exchange.backends.base import SimpleExchangeBackend from djmoney.contrib.exchange.models import ExchangeBackend, Rate -from common.settings import currency_code_default, currency_codes +from common.currency import currency_code_default, currency_codes logger = logging.getLogger('inventree') diff --git a/src/backend/InvenTree/InvenTree/fields.py b/src/backend/InvenTree/InvenTree/fields.py index f4dc686212..9dd0d81fb0 100644 --- a/src/backend/InvenTree/InvenTree/fields.py +++ b/src/backend/InvenTree/InvenTree/fields.py @@ -59,7 +59,7 @@ class InvenTreeURLField(models.URLField): def money_kwargs(**kwargs): """Returns the database settings for MoneyFields.""" - from common.settings import currency_code_default, currency_code_mappings + from common.currency import currency_code_default, currency_code_mappings # Default values (if not specified) if 'max_digits' not in kwargs: diff --git a/src/backend/InvenTree/InvenTree/filters.py b/src/backend/InvenTree/InvenTree/filters.py index 52af9ba436..f3182d0931 100644 --- a/src/backend/InvenTree/InvenTree/filters.py +++ b/src/backend/InvenTree/InvenTree/filters.py @@ -166,3 +166,5 @@ SEARCH_ORDER_FILTER_ALIAS = [ ] ORDER_FILTER = [rest_filters.DjangoFilterBackend, filters.OrderingFilter] + +ORDER_FILTER_ALIAS = [rest_filters.DjangoFilterBackend, InvenTreeOrderingFilter] diff --git a/src/backend/InvenTree/InvenTree/helpers.py b/src/backend/InvenTree/InvenTree/helpers.py index fab133036b..a3ca2ffaf5 100644 --- a/src/backend/InvenTree/InvenTree/helpers.py +++ b/src/backend/InvenTree/InvenTree/helpers.py @@ -28,7 +28,7 @@ from djmoney.money import Money from PIL import Image import InvenTree.version -from common.settings import currency_code_default +from common.currency import currency_code_default from .settings import MEDIA_URL, STATIC_URL @@ -293,13 +293,13 @@ def increment(value): QQQ -> QQQ """ - value = str(value).strip() - # Ignore empty strings if value in ['', None]: # Provide a default value if provided with a null input return '1' + value = str(value).strip() + pattern = r'(.*?)(\d+)?$' result = re.search(pattern, value) diff --git a/src/backend/InvenTree/InvenTree/helpers_model.py b/src/backend/InvenTree/InvenTree/helpers_model.py index 7e87d44314..4296b4f0dc 100644 --- a/src/backend/InvenTree/InvenTree/helpers_model.py +++ b/src/backend/InvenTree/InvenTree/helpers_model.py @@ -63,7 +63,7 @@ def get_base_url(request=None): # Check if a global InvenTree setting is provided try: if site_url := common.models.InvenTreeSetting.get_setting( - 'INVENTREE_BASE_URL', create=False, cache=False + 'INVENTREE_BASE_URL', create=False ): return site_url except (ProgrammingError, OperationalError): diff --git a/src/backend/InvenTree/InvenTree/locales.py b/src/backend/InvenTree/InvenTree/locales.py index d5c7391261..6234970ec4 100644 --- a/src/backend/InvenTree/InvenTree/locales.py +++ b/src/backend/InvenTree/InvenTree/locales.py @@ -45,6 +45,7 @@ LOCALES = [ ('sv', _('Swedish')), ('th', _('Thai')), ('tr', _('Turkish')), + ('uk', _('Ukrainian')), ('vi', _('Vietnamese')), ('zh-hans', _('Chinese (Simplified)')), ('zh-hant', _('Chinese (Traditional)')), diff --git a/src/backend/InvenTree/InvenTree/metadata.py b/src/backend/InvenTree/InvenTree/metadata.py index 9811a41d7c..19404f46b2 100644 --- a/src/backend/InvenTree/InvenTree/metadata.py +++ b/src/backend/InvenTree/InvenTree/metadata.py @@ -115,16 +115,57 @@ class InvenTreeMetadata(SimpleMetadata): return metadata + def override_value(self, field_name, field_value, model_value): + """Override a value on the serializer with a matching value for the model. + + This is used to override the serializer values with model values, + if (and *only* if) the model value should take precedence. + + The values are overridden under the following conditions: + - field_value is None + - model_value is callable, and field_value is not (this indicates that the model value is translated) + - model_value is not a string, and field_value is a string (this indicates that the model value is translated) + """ + if model_value and not field_value: + return model_value + + if field_value and not model_value: + return field_value + + if callable(model_value) and not callable(field_value): + return model_value + + if type(model_value) is not str and type(field_value) is str: + return model_value + + return field_value + def get_serializer_info(self, serializer): """Override get_serializer_info so that we can add 'default' values to any fields whose Meta.model specifies a default value.""" self.serializer = serializer serializer_info = super().get_serializer_info(serializer) + # Look for any dynamic fields which were not available when the serializer was instantiated + if hasattr(serializer, 'Meta'): + for field_name in serializer.Meta.fields: + if field_name in serializer_info: + # Already know about this one + continue + + if hasattr(serializer, field_name): + field = getattr(serializer, field_name) + serializer_info[field_name] = self.get_field_info(field) + model_class = None # Attributes to copy extra attributes from the model to the field (if they don't exist) - extra_attributes = ['help_text', 'max_length'] + # Note that the attributes may be named differently on the underlying model! + extra_attributes = { + 'help_text': 'help_text', + 'max_length': 'max_length', + 'label': 'verbose_name', + } try: model_class = serializer.Meta.model @@ -155,10 +196,12 @@ class InvenTreeMetadata(SimpleMetadata): elif name in model_default_values: serializer_info[name]['default'] = model_default_values[name] - for attr in extra_attributes: - if attr not in serializer_info[name]: - if hasattr(field, attr): - serializer_info[name][attr] = getattr(field, attr) + for field_key, model_key in extra_attributes.items(): + field_value = serializer_info[name].get(field_key, None) + model_value = getattr(field, model_key, None) + + if value := self.override_value(name, field_value, model_value): + serializer_info[name][field_key] = value # Iterate through relations for name, relation in model_fields.relations.items(): @@ -176,13 +219,12 @@ class InvenTreeMetadata(SimpleMetadata): relation.model_field.get_limit_choices_to() ) - for attr in extra_attributes: - if attr not in serializer_info[name] and hasattr( - relation.model_field, attr - ): - serializer_info[name][attr] = getattr( - relation.model_field, attr - ) + for field_key, model_key in extra_attributes.items(): + field_value = serializer_info[name].get(field_key, None) + model_value = getattr(relation.model_field, model_key, None) + + if value := self.override_value(name, field_value, model_value): + serializer_info[name][field_key] = value if name in model_default_values: serializer_info[name]['default'] = model_default_values[name] @@ -264,7 +306,9 @@ class InvenTreeMetadata(SimpleMetadata): # Introspect writable related fields if field_info['type'] == 'field' and not field_info['read_only']: # If the field is a PrimaryKeyRelatedField, we can extract the model from the queryset - if isinstance(field, serializers.PrimaryKeyRelatedField): + if isinstance(field, serializers.PrimaryKeyRelatedField) or issubclass( + field.__class__, serializers.PrimaryKeyRelatedField + ): model = field.queryset.model else: logger.debug( @@ -285,6 +329,9 @@ class InvenTreeMetadata(SimpleMetadata): else: field_info['api_url'] = model.get_api_url() + # Handle custom 'primary key' field + field_info['pk_field'] = getattr(field, 'pk_field', 'pk') or 'pk' + # Add more metadata about dependent fields if field_info['type'] == 'dependent field': field_info['depends_on'] = field.depends_on diff --git a/src/backend/InvenTree/InvenTree/middleware.py b/src/backend/InvenTree/InvenTree/middleware.py index 1eda1df57a..d5463af22e 100644 --- a/src/backend/InvenTree/InvenTree/middleware.py +++ b/src/backend/InvenTree/InvenTree/middleware.py @@ -70,7 +70,8 @@ class AuthRequiredMiddleware(object): # API requests are handled by the DRF library if request.path_info.startswith('/api/'): - return self.get_response(request) + response = self.get_response(request) + return response # Is the function exempt from auth requirements? path_func = resolve(request.path).func diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index 6317c673d2..0e2b4ca9e9 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -122,6 +122,20 @@ class PluginValidationMixin(DiffMixin): self.run_plugin_validation() super().save(*args, **kwargs) + def delete(self): + """Run plugin validation on model delete. + + Allows plugins to prevent model instances from being deleted. + + Note: Each plugin may raise a ValidationError to prevent deletion. + """ + from plugin.registry import registry + + for plugin in registry.with_mixin('validation'): + plugin.validate_model_deletion(self) + + super().delete() + class MetadataMixin(models.Model): """Model mixin class which adds a JSON metadata field to a model, for use by any (and all) plugins. @@ -1017,6 +1031,30 @@ class InvenTreeNotesMixin(models.Model): abstract = True + def delete(self): + """Custom delete method for InvenTreeNotesMixin. + + - Before deleting the object, check if there are any uploaded images associated with it. + - If so, delete the notes first + """ + from common.models import NotesImage + + images = NotesImage.objects.filter( + model_type=self.__class__.__name__.lower(), model_id=self.pk + ) + + if images.exists(): + logger.info( + 'Deleting %s uploaded images associated with %s <%s>', + images.count(), + self.__class__.__name__, + self.pk, + ) + + images.delete() + + super().delete() + notes = InvenTree.fields.InvenTreeNotesField( verbose_name=_('Notes'), help_text=_('Markdown notes (optional)') ) diff --git a/src/backend/InvenTree/InvenTree/ready.py b/src/backend/InvenTree/InvenTree/ready.py index b8ebfb6e0a..41b3058fc8 100644 --- a/src/backend/InvenTree/InvenTree/ready.py +++ b/src/backend/InvenTree/InvenTree/ready.py @@ -114,6 +114,7 @@ def canAppAccessDatabase( 'wait_for_db', 'makemessages', 'compilemessages', + 'spectactular', ] if not allow_shell: diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 08c53d20e5..1ee69b403a 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -18,12 +18,13 @@ from djmoney.utils import MONEY_CLASSES, get_currency_field_name from rest_framework import serializers from rest_framework.exceptions import PermissionDenied, ValidationError from rest_framework.fields import empty +from rest_framework.mixins import ListModelMixin from rest_framework.serializers import DecimalField from rest_framework.utils import model_meta from taggit.serializers import TaggitSerializer import common.models as common_models -from common.settings import currency_code_default, currency_code_mappings +from common.currency import currency_code_default, currency_code_mappings from InvenTree.fields import InvenTreeRestURLField, InvenTreeURLField @@ -842,6 +843,23 @@ class DataFileExtractSerializer(serializers.Serializer): pass +class NotesFieldMixin: + """Serializer mixin for handling 'notes' fields. + + The 'notes' field will be hidden in a LIST serializer, + but available in a DETAIL serializer. + """ + + def __init__(self, *args, **kwargs): + """Remove 'notes' field from list views.""" + super().__init__(*args, **kwargs) + + if hasattr(self, 'context'): + if view := self.context.get('view', None): + if issubclass(view.__class__, ListModelMixin): + self.fields.pop('notes', None) + + class RemoteImageMixin(metaclass=serializers.SerializerMetaclass): """Mixin class which allows downloading an 'image' from a remote URL. diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 7bda362b49..7aed4489a5 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -11,7 +11,6 @@ database setup in this file. import logging import os -import socket import sys from pathlib import Path @@ -21,10 +20,10 @@ from django.core.validators import URLValidator from django.http import Http404 from django.utils.translation import gettext_lazy as _ -import moneyed import pytz from dotenv import load_dotenv +from InvenTree.cache import get_cache_config, is_global_cache_enabled from InvenTree.config import get_boolean_setting, get_custom_file, get_setting from InvenTree.ready import isInMainThread from InvenTree.sentry import default_sentry_dsn, init_sentry @@ -193,7 +192,6 @@ INSTALLED_APPS = [ 'common.apps.CommonConfig', 'company.apps.CompanyConfig', 'plugin.apps.PluginAppConfig', # Plugin app runs before all apps that depend on the isPluginRegistryLoaded function - 'label.apps.LabelConfig', 'order.apps.OrderConfig', 'part.apps.PartConfig', 'report.apps.ReportConfig', @@ -274,17 +272,18 @@ if DEBUG and get_boolean_setting( 'INVENTREE_DEBUG_QUERYCOUNT', 'debug_querycount', False ): MIDDLEWARE.append('querycount.middleware.QueryCountMiddleware') + logger.debug('Running with debug_querycount middleware enabled') QUERYCOUNT = { 'THRESHOLDS': { 'MEDIUM': 50, 'HIGH': 200, - 'MIN_TIME_TO_LOG': 0, - 'MIN_QUERY_COUNT_TO_LOG': 0, + 'MIN_TIME_TO_LOG': 0.1, + 'MIN_QUERY_COUNT_TO_LOG': 25, }, 'IGNORE_REQUEST_PATTERNS': ['^(?!\/(api)?(plugin)?\/).*'], 'IGNORE_SQL_PATTERNS': [], - 'DISPLAY_DUPLICATES': 3, + 'DISPLAY_DUPLICATES': 1, 'RESPONSE_HEADER': 'X-Django-Query-Count', } @@ -434,12 +433,7 @@ ROOT_URLCONF = 'InvenTree.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ - BASE_DIR.joinpath('templates'), - # Allow templates in the reporting directory to be accessed - MEDIA_ROOT.joinpath('report'), - MEDIA_ROOT.joinpath('label'), - ], + 'DIRS': [BASE_DIR.joinpath('templates'), MEDIA_ROOT.joinpath('report')], 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', @@ -809,38 +803,9 @@ if TRACING_ENABLED: # pragma: no cover # endregion # Cache configuration -cache_host = get_setting('INVENTREE_CACHE_HOST', 'cache.host', None) -cache_port = get_setting('INVENTREE_CACHE_PORT', 'cache.port', '6379', typecast=int) +GLOBAL_CACHE_ENABLED = is_global_cache_enabled() -if cache_host: # pragma: no cover - # We are going to rely upon a possibly non-localhost for our cache, - # so don't wait too long for the cache as nothing in the cache should be - # irreplaceable. - _cache_options = { - 'CLIENT_CLASS': 'django_redis.client.DefaultClient', - 'SOCKET_CONNECT_TIMEOUT': int(os.getenv('CACHE_CONNECT_TIMEOUT', '2')), - 'SOCKET_TIMEOUT': int(os.getenv('CACHE_SOCKET_TIMEOUT', '2')), - 'CONNECTION_POOL_KWARGS': { - 'socket_keepalive': config.is_true(os.getenv('CACHE_TCP_KEEPALIVE', '1')), - 'socket_keepalive_options': { - socket.TCP_KEEPCNT: int(os.getenv('CACHE_KEEPALIVES_COUNT', '5')), - socket.TCP_KEEPIDLE: int(os.getenv('CACHE_KEEPALIVES_IDLE', '1')), - socket.TCP_KEEPINTVL: int(os.getenv('CACHE_KEEPALIVES_INTERVAL', '1')), - socket.TCP_USER_TIMEOUT: int( - os.getenv('CACHE_TCP_USER_TIMEOUT', '1000') - ), - }, - }, - } - CACHES = { - 'default': { - 'BACKEND': 'django_redis.cache.RedisCache', - 'LOCATION': f'redis://{cache_host}:{cache_port}/0', - 'OPTIONS': _cache_options, - } - } -else: - CACHES = {'default': {'BACKEND': 'django.core.cache.backends.locmem.LocMemCache'}} +CACHES = {'default': get_cache_config(GLOBAL_CACHE_ENABLED)} _q_worker_timeout = int( get_setting('INVENTREE_BACKGROUND_TIMEOUT', 'background.timeout', 90) @@ -871,7 +836,7 @@ Q_CLUSTER = { if SENTRY_ENABLED and SENTRY_DSN: Q_CLUSTER['error_reporter'] = {'sentry': {'dsn': SENTRY_DSN}} -if cache_host: # pragma: no cover +if GLOBAL_CACHE_ENABLED: # pragma: no cover # If using external redis cache, make the cache the broker for Django Q # as well Q_CLUSTER['django_redis'] = 'worker' @@ -938,28 +903,9 @@ if get_boolean_setting('TEST_TRANSLATIONS', default_value=False): # pragma: no LANG_INFO = dict(django.conf.locale.LANG_INFO, **EXTRA_LANG_INFO) django.conf.locale.LANG_INFO = LANG_INFO -# Currencies available for use -CURRENCIES = get_setting( - 'INVENTREE_CURRENCIES', - 'currencies', - ['AUD', 'CAD', 'CNY', 'EUR', 'GBP', 'JPY', 'NZD', 'USD'], - typecast=list, -) - -# Ensure that at least one currency value is available -if len(CURRENCIES) == 0: # pragma: no cover - logger.warning('No currencies selected: Defaulting to USD') - CURRENCIES = ['USD'] - # Maximum number of decimal places for currency rendering CURRENCY_DECIMAL_PLACES = 6 -# Check that each provided currency is supported -for currency in CURRENCIES: - if currency not in moneyed.CURRENCIES: # pragma: no cover - logger.error("Currency code '%s' is not supported", currency) - sys.exit(1) - # Custom currency exchange backend EXCHANGE_BACKEND = 'InvenTree.exchange.InvenTreeExchange' @@ -1022,8 +968,12 @@ if SITE_URL: logger.info('Using Site URL: %s', SITE_URL) # Check that the site URL is valid - validator = URLValidator() - validator(SITE_URL) + try: + validator = URLValidator() + validator(SITE_URL) + except Exception: + print(f"Invalid SITE_URL value: '{SITE_URL}'. InvenTree server cannot start.") + sys.exit(-1) # Enable or disable multi-site framework SITE_MULTI = get_boolean_setting('INVENTREE_SITE_MULTI', 'site_multi', False) @@ -1090,26 +1040,44 @@ if SITE_URL and SITE_URL not in CSRF_TRUSTED_ORIGINS: if DEBUG: for origin in [ 'http://localhost', - 'http://*.localhost' 'http://*localhost:8000', + 'http://*.localhost', + 'http://*localhost:8000', 'http://*localhost:5173', ]: if origin not in CSRF_TRUSTED_ORIGINS: CSRF_TRUSTED_ORIGINS.append(origin) -if not TESTING and len(CSRF_TRUSTED_ORIGINS) == 0: - if isInMainThread(): - # Server thread cannot run without CSRF_TRUSTED_ORIGINS - logger.error( - 'No CSRF_TRUSTED_ORIGINS specified. Please provide a list of trusted origins, or specify INVENTREE_SITE_URL' - ) - sys.exit(-1) +if ( + not TESTING and len(CSRF_TRUSTED_ORIGINS) == 0 and isInMainThread() +): # pragma: no cover + # Server thread cannot run without CSRF_TRUSTED_ORIGINS + logger.error( + 'No CSRF_TRUSTED_ORIGINS specified. Please provide a list of trusted origins, or specify INVENTREE_SITE_URL' + ) + sys.exit(-1) + +COOKIE_MODE = ( + str(get_setting('INVENTREE_COOKIE_SAMESITE', 'cookie.samesite', 'None')) + .lower() + .strip() +) + +valid_cookie_modes = {'lax': 'Lax', 'strict': 'Strict', 'none': None, 'null': None} + +if COOKIE_MODE not in valid_cookie_modes.keys(): + logger.error('Invalid cookie samesite mode: %s', COOKIE_MODE) + sys.exit(-1) + +COOKIE_MODE = valid_cookie_modes[COOKIE_MODE.lower()] # Additional CSRF settings CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN' CSRF_COOKIE_NAME = 'csrftoken' -CSRF_COOKIE_SAMESITE = 'Lax' -SESSION_COOKIE_SECURE = True -SESSION_COOKIE_SAMESITE = 'Lax' +CSRF_COOKIE_SAMESITE = COOKIE_MODE +SESSION_COOKIE_SAMESITE = COOKIE_MODE +SESSION_COOKIE_SECURE = get_boolean_setting( + 'INVENTREE_SESSION_COOKIE_SECURE', 'cookie.secure', False +) USE_X_FORWARDED_HOST = get_boolean_setting( 'INVENTREE_USE_X_FORWARDED_HOST', diff --git a/src/backend/InvenTree/InvenTree/status_codes.py b/src/backend/InvenTree/InvenTree/status_codes.py index 8d6aee3562..81d713f59c 100644 --- a/src/backend/InvenTree/InvenTree/status_codes.py +++ b/src/backend/InvenTree/InvenTree/status_codes.py @@ -1,197 +1,9 @@ -"""Status codes for InvenTree.""" +"""Global import of all status codes. -from django.utils.translation import gettext_lazy as _ +This file remains here for backwards compatibility, +as external plugins may import status codes from this file. +""" -from generic.states import StatusCode - - -class PurchaseOrderStatus(StatusCode): - """Defines a set of status codes for a PurchaseOrder.""" - - # Order status codes - PENDING = 10, _('Pending'), 'secondary' # Order is pending (not yet placed) - PLACED = 20, _('Placed'), 'primary' # Order has been placed with supplier - COMPLETE = 30, _('Complete'), 'success' # Order has been completed - CANCELLED = 40, _('Cancelled'), 'danger' # Order was cancelled - LOST = 50, _('Lost'), 'warning' # Order was lost - RETURNED = 60, _('Returned'), 'warning' # Order was returned - - -class PurchaseOrderStatusGroups: - """Groups for PurchaseOrderStatus codes.""" - - # Open orders - OPEN = [PurchaseOrderStatus.PENDING.value, PurchaseOrderStatus.PLACED.value] - - # Failed orders - FAILED = [ - PurchaseOrderStatus.CANCELLED.value, - PurchaseOrderStatus.LOST.value, - PurchaseOrderStatus.RETURNED.value, - ] - - -class SalesOrderStatus(StatusCode): - """Defines a set of status codes for a SalesOrder.""" - - PENDING = 10, _('Pending'), 'secondary' # Order is pending - IN_PROGRESS = ( - 15, - _('In Progress'), - 'primary', - ) # Order has been issued, and is in progress - SHIPPED = 20, _('Shipped'), 'success' # Order has been shipped to customer - CANCELLED = 40, _('Cancelled'), 'danger' # Order has been cancelled - LOST = 50, _('Lost'), 'warning' # Order was lost - RETURNED = 60, _('Returned'), 'warning' # Order was returned - - -class SalesOrderStatusGroups: - """Groups for SalesOrderStatus codes.""" - - # Open orders - OPEN = [SalesOrderStatus.PENDING.value, SalesOrderStatus.IN_PROGRESS.value] - - # Completed orders - COMPLETE = [SalesOrderStatus.SHIPPED.value] - - -class StockStatus(StatusCode): - """Status codes for Stock.""" - - OK = 10, _('OK'), 'success' # Item is OK - ATTENTION = 50, _('Attention needed'), 'warning' # Item requires attention - DAMAGED = 55, _('Damaged'), 'warning' # Item is damaged - DESTROYED = 60, _('Destroyed'), 'danger' # Item is destroyed - REJECTED = 65, _('Rejected'), 'danger' # Item is rejected - LOST = 70, _('Lost'), 'dark' # Item has been lost - QUARANTINED = ( - 75, - _('Quarantined'), - 'info', - ) # Item has been quarantined and is unavailable - RETURNED = 85, _('Returned'), 'warning' # Item has been returned from a customer - - -class StockStatusGroups: - """Groups for StockStatus codes.""" - - # The following codes correspond to parts that are 'available' or 'in stock' - AVAILABLE_CODES = [ - StockStatus.OK.value, - StockStatus.ATTENTION.value, - StockStatus.DAMAGED.value, - StockStatus.RETURNED.value, - ] - - -class StockHistoryCode(StatusCode): - """Status codes for StockHistory.""" - - LEGACY = 0, _('Legacy stock tracking entry') - - CREATED = 1, _('Stock item created') - - # Manual editing operations - EDITED = 5, _('Edited stock item') - ASSIGNED_SERIAL = 6, _('Assigned serial number') - - # Manual stock operations - STOCK_COUNT = 10, _('Stock counted') - STOCK_ADD = 11, _('Stock manually added') - STOCK_REMOVE = 12, _('Stock manually removed') - - # Location operations - STOCK_MOVE = 20, _('Location changed') - STOCK_UPDATE = 25, _('Stock updated') - - # Installation operations - INSTALLED_INTO_ASSEMBLY = 30, _('Installed into assembly') - REMOVED_FROM_ASSEMBLY = 31, _('Removed from assembly') - - INSTALLED_CHILD_ITEM = 35, _('Installed component item') - REMOVED_CHILD_ITEM = 36, _('Removed component item') - - # Stock splitting operations - SPLIT_FROM_PARENT = 40, _('Split from parent item') - SPLIT_CHILD_ITEM = 42, _('Split child item') - - # Stock merging operations - MERGED_STOCK_ITEMS = 45, _('Merged stock items') - - # Convert stock item to variant - CONVERTED_TO_VARIANT = 48, _('Converted to variant') - - # Build order codes - BUILD_OUTPUT_CREATED = 50, _('Build order output created') - BUILD_OUTPUT_COMPLETED = 55, _('Build order output completed') - BUILD_OUTPUT_REJECTED = 56, _('Build order output rejected') - BUILD_CONSUMED = 57, _('Consumed by build order') - - # Sales order codes - SHIPPED_AGAINST_SALES_ORDER = 60, _('Shipped against Sales Order') - - # Purchase order codes - RECEIVED_AGAINST_PURCHASE_ORDER = 70, _('Received against Purchase Order') - - # Return order codes - RETURNED_AGAINST_RETURN_ORDER = 80, _('Returned against Return Order') - - # Customer actions - SENT_TO_CUSTOMER = 100, _('Sent to customer') - RETURNED_FROM_CUSTOMER = 105, _('Returned from customer') - - -class BuildStatus(StatusCode): - """Build status codes.""" - - PENDING = 10, _('Pending'), 'secondary' # Build is pending / active - PRODUCTION = 20, _('Production'), 'primary' # BuildOrder is in production - CANCELLED = 30, _('Cancelled'), 'danger' # Build was cancelled - COMPLETE = 40, _('Complete'), 'success' # Build is complete - - -class BuildStatusGroups: - """Groups for BuildStatus codes.""" - - ACTIVE_CODES = [BuildStatus.PENDING.value, BuildStatus.PRODUCTION.value] - - -class ReturnOrderStatus(StatusCode): - """Defines a set of status codes for a ReturnOrder.""" - - # Order is pending, waiting for receipt of items - PENDING = 10, _('Pending'), 'secondary' - - # Items have been received, and are being inspected - IN_PROGRESS = 20, _('In Progress'), 'primary' - - COMPLETE = 30, _('Complete'), 'success' - CANCELLED = 40, _('Cancelled'), 'danger' - - -class ReturnOrderStatusGroups: - """Groups for ReturnOrderStatus codes.""" - - OPEN = [ReturnOrderStatus.PENDING.value, ReturnOrderStatus.IN_PROGRESS.value] - - -class ReturnOrderLineStatus(StatusCode): - """Defines a set of status codes for a ReturnOrderLineItem.""" - - PENDING = 10, _('Pending'), 'secondary' - - # Item is to be returned to customer, no other action - RETURN = 20, _('Return'), 'success' - - # Item is to be repaired, and returned to customer - REPAIR = 30, _('Repair'), 'primary' - - # Item is to be replaced (new item shipped) - REPLACE = 40, _('Replace'), 'warning' - - # Item is to be refunded (cannot be repaired) - REFUND = 50, _('Refund'), 'info' - - # Item is rejected - REJECT = 60, _('Reject'), 'danger' +from build.status_codes import * +from order.status_codes import * +from stock.status_codes import * diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 4356509e12..9b8366ef82 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -571,8 +571,8 @@ def update_exchange_rates(force: bool = False): try: from djmoney.contrib.exchange.models import Rate + from common.currency import currency_code_default, currency_codes from common.models import InvenTreeSetting - from common.settings import currency_code_default, currency_codes from InvenTree.exchange import InvenTreeExchange except AppRegistryNotReady: # pragma: no cover # Apps not yet loaded! diff --git a/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py b/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py index 48fbe7ba99..c6408d8f34 100644 --- a/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py +++ b/src/backend/InvenTree/InvenTree/templatetags/inventree_extras.py @@ -16,7 +16,7 @@ import common.models import InvenTree.helpers import InvenTree.helpers_model import plugin.models -from common.settings import currency_code_default +from common.currency import currency_code_default from InvenTree import settings, version from plugin import registry from plugin.plugin import InvenTreePlugin diff --git a/src/backend/InvenTree/InvenTree/test_api.py b/src/backend/InvenTree/InvenTree/test_api.py index 58e18df2e5..ea1a6c5b4a 100644 --- a/src/backend/InvenTree/InvenTree/test_api.py +++ b/src/backend/InvenTree/InvenTree/test_api.py @@ -128,7 +128,7 @@ class APITests(InvenTreeAPITestCase): response = self.client.get(url, format='json') # Not logged in, so cannot access user role data - self.assertTrue(response.status_code in [401, 403]) + self.assertIn(response.status_code, [401, 403]) # Now log in! self.basicAuth() diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index 6f32995592..165c981edd 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -29,8 +29,8 @@ import InvenTree.format import InvenTree.helpers import InvenTree.helpers_model import InvenTree.tasks +from common.currency import currency_codes from common.models import CustomUnit, InvenTreeSetting -from common.settings import currency_codes from InvenTree.helpers_mixin import ClassProviderMixin, ClassValidationMixin from InvenTree.sanitizer import sanitize_svg from InvenTree.unit_test import InvenTreeTestCase @@ -1030,7 +1030,7 @@ class TestVersionNumber(TestCase): s = '.'.join([str(i) for i in v]) - self.assertTrue(s in version.inventreeVersion()) + self.assertIn(s, version.inventreeVersion()) def test_comparison(self): """Test direct comparison of version numbers.""" @@ -1039,10 +1039,10 @@ class TestVersionNumber(TestCase): v_c = version.inventreeVersionTuple('1.2.4') v_d = version.inventreeVersionTuple('2.0.0') - self.assertTrue(v_b > v_a) - self.assertTrue(v_c > v_b) - self.assertTrue(v_d > v_c) - self.assertTrue(v_d > v_a) + self.assertGreater(v_b, v_a) + self.assertGreater(v_c, v_b) + self.assertGreater(v_d, v_c) + self.assertGreater(v_d, v_a) def test_commit_info(self): """Test that the git commit information is extracted successfully.""" @@ -1065,7 +1065,8 @@ class TestVersionNumber(TestCase): subprocess.check_output('git rev-parse --short HEAD'.split()), 'utf-8' ).strip() - self.assertEqual(hash, version.inventreeCommitHash()) + # On some systems the hash is a different length, so just check the first 6 characters + self.assertEqual(hash[:6], version.inventreeCommitHash()[:6]) d = ( str(subprocess.check_output('git show -s --format=%ci'.split()), 'utf-8') @@ -1505,7 +1506,7 @@ class MagicLoginTest(InvenTreeTestCase): self.assertEqual(mail.outbox[0].subject, '[InvenTree] Log in to the app') # Check that the token is in the email - self.assertTrue('http://testserver/api/email/login/' in mail.outbox[0].body) + self.assertIn('http://testserver/api/email/login/', mail.outbox[0].body) token = mail.outbox[0].body.split('/')[-1].split('\n')[0][8:] self.assertEqual(get_user(token), self.user) diff --git a/src/backend/InvenTree/InvenTree/unit_test.py b/src/backend/InvenTree/InvenTree/unit_test.py index 4ad2d68b7b..aee89660f3 100644 --- a/src/backend/InvenTree/InvenTree/unit_test.py +++ b/src/backend/InvenTree/InvenTree/unit_test.py @@ -4,6 +4,7 @@ import csv import io import json import re +import time from contextlib import contextmanager from pathlib import Path @@ -141,7 +142,15 @@ class UserMixin: def setUp(self): """Run setup for individual test methods.""" if self.auto_login: - self.client.login(username=self.username, password=self.password) + self.login() + + def login(self): + """Login with the current user credentials.""" + self.client.login(username=self.username, password=self.password) + + def logout(self): + """Lougout current user.""" + self.client.logout() @classmethod def assignRole(cls, role=None, assign_all: bool = False, group=None): @@ -228,10 +237,19 @@ class InvenTreeTestCase(ExchangeRateMixin, UserMixin, TestCase): class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): """Base class for running InvenTree API tests.""" + # Default query count threshold value + # TODO: This value should be reduced + MAX_QUERY_COUNT = 250 + + WARNING_QUERY_THRESHOLD = 100 + + # Default query time threshold value + # TODO: This value should be reduced + # Note: There is a lot of variability in the query time in unit testing... + MAX_QUERY_TIME = 7.5 + @contextmanager - def assertNumQueriesLessThan( - self, value, using='default', verbose=False, debug=False - ): + def assertNumQueriesLessThan(self, value, using='default', verbose=None, url=None): """Context manager to check that the number of queries is less than a certain value. Example: @@ -242,6 +260,13 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): with CaptureQueriesContext(connections[using]) as context: yield # your test will be run here + n = len(context.captured_queries) + + if url and n >= value: + print( + f'Query count exceeded at {url}: Expected < {value} queries, got {n}' + ) # pragma: no cover + if verbose: msg = '\r\n%s' % json.dumps( context.captured_queries, indent=4 @@ -249,34 +274,29 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): else: msg = None - n = len(context.captured_queries) - - if debug: - print( - f'Expected less than {value} queries, got {n} queries' - ) # pragma: no cover + if url and n > self.WARNING_QUERY_THRESHOLD: + print(f'Warning: {n} queries executed at {url}') self.assertLess(n, value, msg=msg) - def checkResponse(self, url, method, expected_code, response): + def check_response(self, url, response, expected_code=None): """Debug output for an unexpected response.""" - # No expected code, return - if expected_code is None: - return + # Check that the response returned the expected status code - if expected_code != response.status_code: # pragma: no cover - print( - f"Unexpected {method} response at '{url}': status_code = {response.status_code}" - ) + if expected_code is not None: + if expected_code != response.status_code: # pragma: no cover + print( + f"Unexpected response at '{url}': status_code = {response.status_code} (expected {expected_code})" + ) - if hasattr(response, 'data'): - print('data:', response.data) - if hasattr(response, 'body'): - print('body:', response.body) - if hasattr(response, 'content'): - print('content:', response.content) + if hasattr(response, 'data'): + print('data:', response.data) + if hasattr(response, 'body'): + print('body:', response.body) + if hasattr(response, 'content'): + print('content:', response.content) - self.assertEqual(expected_code, response.status_code) + self.assertEqual(expected_code, response.status_code) def getActions(self, url): """Return a dict of the 'actions' available at a given endpoint. @@ -289,72 +309,88 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): actions = response.data.get('actions', {}) return actions - def get(self, url, data=None, expected_code=200, format='json', **kwargs): + def query(self, url, method, data=None, **kwargs): + """Perform a generic API query.""" + if data is None: + data = {} + + expected_code = kwargs.pop('expected_code', None) + + kwargs['format'] = kwargs.get('format', 'json') + + max_queries = kwargs.get('max_query_count', self.MAX_QUERY_COUNT) + max_query_time = kwargs.get('max_query_time', self.MAX_QUERY_TIME) + + t1 = time.time() + + with self.assertNumQueriesLessThan(max_queries, url=url): + response = method(url, data, **kwargs) + t2 = time.time() + dt = t2 - t1 + + self.check_response(url, response, expected_code=expected_code) + + if dt > max_query_time: + print( + f'Query time exceeded at {url}: Expected {max_query_time}s, got {dt}s' + ) + + self.assertLessEqual(dt, max_query_time) + + return response + + def get(self, url, data=None, expected_code=200, **kwargs): """Issue a GET request.""" - # Set default - see B006 - if data is None: - data = {} + kwargs['data'] = data - response = self.client.get(url, data, format=format, **kwargs) + return self.query(url, self.client.get, expected_code=expected_code, **kwargs) - self.checkResponse(url, 'GET', expected_code, response) - - return response - - def post(self, url, data=None, expected_code=None, format='json', **kwargs): + def post(self, url, data=None, expected_code=201, **kwargs): """Issue a POST request.""" - # Set default value - see B006 - if data is None: - data = {} + # Default query limit is higher for POST requests, due to extra event processing + kwargs['max_query_count'] = kwargs.get( + 'max_query_count', self.MAX_QUERY_COUNT + 100 + ) - response = self.client.post(url, data=data, format=format, **kwargs) + kwargs['data'] = data - self.checkResponse(url, 'POST', expected_code, response) + return self.query(url, self.client.post, expected_code=expected_code, **kwargs) - return response - - def delete(self, url, data=None, expected_code=None, format='json', **kwargs): + def delete(self, url, data=None, expected_code=204, **kwargs): """Issue a DELETE request.""" - if data is None: - data = {} + kwargs['data'] = data - response = self.client.delete(url, data=data, format=format, **kwargs) + return self.query( + url, self.client.delete, expected_code=expected_code, **kwargs + ) - self.checkResponse(url, 'DELETE', expected_code, response) - - return response - - def patch(self, url, data, expected_code=None, format='json', **kwargs): + def patch(self, url, data, expected_code=200, **kwargs): """Issue a PATCH request.""" - response = self.client.patch(url, data=data, format=format, **kwargs) + kwargs['data'] = data - self.checkResponse(url, 'PATCH', expected_code, response) + return self.query(url, self.client.patch, expected_code=expected_code, **kwargs) - return response - - def put(self, url, data, expected_code=None, format='json', **kwargs): + def put(self, url, data, expected_code=200, **kwargs): """Issue a PUT request.""" - response = self.client.put(url, data=data, format=format, **kwargs) + kwargs['data'] = data - self.checkResponse(url, 'PUT', expected_code, response) - - return response + return self.query(url, self.client.put, expected_code=expected_code, **kwargs) def options(self, url, expected_code=None, **kwargs): """Issue an OPTIONS request.""" - response = self.client.options(url, format='json', **kwargs) + kwargs['data'] = kwargs.get('data', None) - self.checkResponse(url, 'OPTIONS', expected_code, response) - - return response + return self.query( + url, self.client.options, expected_code=expected_code, **kwargs + ) def download_file( - self, url, data, expected_code=None, expected_fn=None, decode=True + self, url, data, expected_code=None, expected_fn=None, decode=True, **kwargs ): """Download a file from the server, and return an in-memory file.""" response = self.client.get(url, data=data, format='json') - self.checkResponse(url, 'DOWNLOAD_FILE', expected_code, response) + self.check_response(url, response, expected_code=expected_code) # Check that the response is of the correct type if not isinstance(response, StreamingHttpResponse): @@ -397,7 +433,7 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): ): """Helper function to process and validate a downloaded csv file.""" # Check that the correct object type has been passed - self.assertTrue(isinstance(file_object, io.StringIO)) + self.assertIsInstance(file_object, io.StringIO) file_object.seek(0) @@ -435,3 +471,7 @@ class InvenTreeAPITestCase(ExchangeRateMixin, UserMixin, APITestCase): data.append(entry) return data + + def assertDictContainsSubset(self, a, b): + """Assert that dictionary 'a' is a subset of dictionary 'b'.""" + self.assertEqual(b, b | a) diff --git a/src/backend/InvenTree/InvenTree/urls.py b/src/backend/InvenTree/InvenTree/urls.py index ab3dc008a2..e9cd4ead4c 100644 --- a/src/backend/InvenTree/InvenTree/urls.py +++ b/src/backend/InvenTree/InvenTree/urls.py @@ -21,7 +21,6 @@ from sesame.views import LoginView import build.api import common.api import company.api -import label.api import machine.api import order.api import part.api @@ -86,10 +85,25 @@ apipatterns = [ path('part/', include(part.api.part_api_urls)), path('bom/', include(part.api.bom_api_urls)), path('company/', include(company.api.company_api_urls)), + path( + 'generate/', + include([ + path( + 'batch-code/', + stock.api.GenerateBatchCode.as_view(), + name='api-generate-batch-code', + ), + path( + 'serial-number/', + stock.api.GenerateSerialNumber.as_view(), + name='api-generate-serial-number', + ), + ]), + ), path('stock/', include(stock.api.stock_api_urls)), path('build/', include(build.api.build_api_urls)), path('order/', include(order.api.order_api_urls)), - path('label/', include(label.api.label_api_urls)), + path('label/', include(report.api.label_api_urls)), path('report/', include(report.api.report_api_urls)), path('machine/', include(machine.api.machine_api_urls)), path('user/', include(users.api.user_urls)), diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index 6c24250a97..eef574e1bd 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -19,7 +19,7 @@ from dulwich.repo import NotGitRepository, Repo from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION # InvenTree software version -INVENTREE_SW_VERSION = '0.15.0 dev' +INVENTREE_SW_VERSION = '0.16.0 dev' # Discover git try: @@ -104,7 +104,7 @@ def inventreeDocUrl(): def inventreeAppUrl(): """Return URL for InvenTree app site.""" - return f'{inventreeDocUrl()}/app/app/' + return f'https://docs.inventree.org/app/' def inventreeCreditsUrl(): diff --git a/src/backend/InvenTree/InvenTree/views.py b/src/backend/InvenTree/InvenTree/views.py index 05f69531a1..176e704b19 100644 --- a/src/backend/InvenTree/InvenTree/views.py +++ b/src/backend/InvenTree/InvenTree/views.py @@ -25,8 +25,8 @@ from allauth.socialaccount.views import ConnectionsView from djmoney.contrib.exchange.models import ExchangeBackend, Rate from user_sessions.views import SessionDeleteOtherView, SessionDeleteView +import common.currency import common.models as common_models -import common.settings as common_settings from part.models import PartCategory from users.models import RuleSet, check_user_role @@ -506,8 +506,8 @@ class SettingsView(TemplateView): ctx['settings'] = common_models.InvenTreeSetting.objects.all().order_by('key') - ctx['base_currency'] = common_settings.currency_code_default() - ctx['currencies'] = common_settings.currency_codes + ctx['base_currency'] = common.currency.currency_code_default() + ctx['currencies'] = common.currency.currency_codes ctx['rates'] = Rate.objects.filter(backend='InvenTreeExchange') diff --git a/src/backend/InvenTree/build/admin.py b/src/backend/InvenTree/build/admin.py index b3d14c6ec6..1a12166fa4 100644 --- a/src/backend/InvenTree/build/admin.py +++ b/src/backend/InvenTree/build/admin.py @@ -18,7 +18,7 @@ class BuildResource(InvenTreeResource): # TODO: 2022-05-12 - Need to investigate why this is the case! class Meta: - """Metaclass options""" + """Metaclass options.""" models = Build skip_unchanged = True report_skipped = False diff --git a/src/backend/InvenTree/build/api.py b/src/backend/InvenTree/build/api.py index e6e6267fe2..f84bca1273 100644 --- a/src/backend/InvenTree/build/api.py +++ b/src/backend/InvenTree/build/api.py @@ -14,7 +14,7 @@ from django_filters import rest_framework as rest_filters from InvenTree.api import AttachmentMixin, APIDownloadMixin, ListCreateDestroyAPIView, MetadataView from generic.states.api import StatusView from InvenTree.helpers import str2bool, isNull, DownloadFile -from InvenTree.status_codes import BuildStatus, BuildStatusGroups +from build.status_codes import BuildStatus, BuildStatusGroups from InvenTree.mixins import CreateAPI, RetrieveUpdateDestroyAPI, ListCreateAPI import common.models @@ -30,7 +30,7 @@ class BuildFilter(rest_filters.FilterSet): """Custom filterset for BuildList API endpoint.""" class Meta: - """Metaclass options""" + """Metaclass options.""" model = Build fields = [ 'parent', @@ -103,15 +103,35 @@ class BuildFilter(rest_filters.FilterSet): return queryset.filter(project_code=None) -class BuildList(APIDownloadMixin, ListCreateAPI): +class BuildMixin: + """Mixin class for Build API endpoints.""" + + queryset = Build.objects.all() + serializer_class = build.serializers.BuildSerializer + + def get_queryset(self): + """Return the queryset for the Build API endpoints.""" + queryset = super().get_queryset() + + queryset = queryset.prefetch_related( + 'responsible', + 'issued_by', + 'build_lines', + 'build_lines__bom_item', + 'build_lines__build', + 'part', + ) + + return queryset + + +class BuildList(APIDownloadMixin, BuildMixin, ListCreateAPI): """API endpoint for accessing a list of Build objects. - GET: Return list of objects (with filters) - POST: Create a new Build object """ - queryset = Build.objects.all() - serializer_class = build.serializers.BuildSerializer filterset_class = BuildFilter filter_backends = SEARCH_ORDER_FILTER_ALIAS @@ -223,12 +243,9 @@ class BuildList(APIDownloadMixin, ListCreateAPI): return self.serializer_class(*args, **kwargs) -class BuildDetail(RetrieveUpdateDestroyAPI): +class BuildDetail(BuildMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a Build object.""" - queryset = Build.objects.all() - serializer_class = build.serializers.BuildSerializer - def destroy(self, request, *args, **kwargs): """Only allow deletion of a BuildOrder if the build status is CANCELLED""" build = self.get_object() diff --git a/src/backend/InvenTree/build/migrations/0043_buildline.py b/src/backend/InvenTree/build/migrations/0043_buildline.py index 8da86bc015..981b533649 100644 --- a/src/backend/InvenTree/build/migrations/0043_buildline.py +++ b/src/backend/InvenTree/build/migrations/0043_buildline.py @@ -23,6 +23,7 @@ class Migration(migrations.Migration): ], options={ 'unique_together': {('build', 'bom_item')}, + 'verbose_name': 'Build Order Line Item', }, ), ] diff --git a/src/backend/InvenTree/build/migrations/0049_alter_builditem_build_line.py b/src/backend/InvenTree/build/migrations/0049_alter_builditem_build_line.py new file mode 100644 index 0000000000..0f4a4796a9 --- /dev/null +++ b/src/backend/InvenTree/build/migrations/0049_alter_builditem_build_line.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.12 on 2024-05-08 01:38 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0048_build_project_code'), + ] + + operations = [ + migrations.AlterField( + model_name='builditem', + name='build_line', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='allocations', to='build.buildline'), + ), + ] diff --git a/src/backend/InvenTree/build/migrations/0050_auto_20240508_0138.py b/src/backend/InvenTree/build/migrations/0050_auto_20240508_0138.py new file mode 100644 index 0000000000..11e2ef82ef --- /dev/null +++ b/src/backend/InvenTree/build/migrations/0050_auto_20240508_0138.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.12 on 2024-05-08 01:38 + +from django.db import migrations + + +def forward(apps, schema_editor): + """Find and delete any BuildItem instances which have a null BuildLine field.""" + + BuildItem = apps.get_model('build', 'BuildItem') + + items = BuildItem.objects.filter(build_line=None) + + if items.count() > 0: + print(f"Deleting {items.count()} BuildItem objects with null BuildLine field") + items.delete() + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0049_alter_builditem_build_line'), + ] + + operations = [ + migrations.RunPython(forward, reverse_code=migrations.RunPython.noop), + ] diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index 33f54db113..ffbbc0b544 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -22,7 +22,8 @@ from mptt.exceptions import InvalidMove from rest_framework import serializers -from InvenTree.status_codes import BuildStatus, StockStatus, StockHistoryCode, BuildStatusGroups +from build.status_codes import BuildStatus, BuildStatusGroups +from stock.status_codes import StockStatus, StockHistoryCode from build.validators import generate_next_build_reference, validate_build_order_reference @@ -38,6 +39,7 @@ from common.notifications import trigger_notification, InvenTreeNotificationBodi from plugin.events import trigger_event import part.models +import report.mixins import stock.models import users.models @@ -45,7 +47,14 @@ import users.models logger = logging.getLogger('inventree') -class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, InvenTree.models.MetadataMixin, InvenTree.models.PluginValidationMixin, InvenTree.models.ReferenceIndexingMixin, MPTTModel): +class Build( + report.mixins.InvenTreeReportMixin, + InvenTree.models.InvenTreeBarcodeMixin, + InvenTree.models.InvenTreeNotesMixin, + InvenTree.models.MetadataMixin, + InvenTree.models.PluginValidationMixin, + InvenTree.models.ReferenceIndexingMixin, + MPTTModel): """A Build object organises the creation of new StockItem objects from other existing StockItem objects. Attributes: @@ -109,6 +118,12 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo self.validate_reference_field(self.reference) self.reference_int = self.rebuild_reference_field(self.reference) + # On first save (i.e. creation), run some extra checks + if self.pk is None: + # Set the destination location (if not specified) + if not self.destination: + self.destination = self.part.get_default_location() + try: super().save(*args, **kwargs) except InvalidMove: @@ -133,6 +148,21 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo 'part': _('Build order part cannot be changed') }) + def report_context(self) -> dict: + """Generate custom report context data.""" + + return { + 'bom_items': self.part.get_bom_items(), + 'build': self, + 'build_outputs': self.build_outputs.all(), + 'line_items': self.build_lines.all(), + 'part': self.part, + 'quantity': self.quantity, + 'reference': self.reference, + 'title': str(self) + } + + @staticmethod def filterByDate(queryset, min_date, max_date): """Filter by 'minimum and maximum date range'. @@ -538,7 +568,7 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo self.allocated_stock.delete() @transaction.atomic - def complete_build(self, user): + def complete_build(self, user, trim_allocated_stock=False): """Mark this build as complete.""" import build.tasks @@ -546,17 +576,21 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo if self.incomplete_count > 0: return + if trim_allocated_stock: + self.trim_allocated_stock() + self.completion_date = InvenTree.helpers.current_date() self.completed_by = user self.status = BuildStatus.COMPLETE.value self.save() # Offload task to complete build allocations - InvenTree.tasks.offload_task( + if not InvenTree.tasks.offload_task( build.tasks.complete_build_allocations, self.pk, user.pk if user else None - ) + ): + raise ValidationError(_("Failed to offload task to complete build allocations")) # Register an event trigger_event('build.completed', id=self.pk) @@ -608,24 +642,29 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo - Set build status to CANCELLED - Save the Build object """ + + import build.tasks + remove_allocated_stock = kwargs.get('remove_allocated_stock', False) remove_incomplete_outputs = kwargs.get('remove_incomplete_outputs', False) - # Find all BuildItem objects associated with this Build - items = self.allocated_stock - if remove_allocated_stock: - for item in items: - item.complete_allocation(user) + # 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 + ): + raise ValidationError(_("Failed to offload task to complete build allocations")) - items.delete() + else: + self.allocated_stock.all().delete() # Remove incomplete outputs (if required) if remove_incomplete_outputs: outputs = self.build_outputs.filter(is_building=True) - for output in outputs: - output.delete() + outputs.delete() # Date of 'completion' is the date the build was cancelled self.completion_date = InvenTree.helpers.current_date() @@ -676,10 +715,13 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo """ user = kwargs.get('user', None) batch = kwargs.get('batch', self.batch) - location = kwargs.get('location', self.destination) + location = kwargs.get('location', None) serials = kwargs.get('serials', None) auto_allocate = kwargs.get('auto_allocate', False) + if location is None: + location = self.destination or self.part.get_default_location() + """ Determine if we can create a single output (with quantity > 0), or multiple outputs (with quantity = 1) @@ -820,6 +862,10 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo def trim_allocated_stock(self): """Called after save to reduce allocated stock if the build order is now overallocated.""" # Only need to worry about untracked stock here + + items_to_save = [] + items_to_delete = [] + for build_line in self.untracked_line_items: reduce_by = build_line.allocated_quantity() - build_line.quantity @@ -837,13 +883,19 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo # Easy case - this item can just be reduced. if item.quantity > reduce_by: item.quantity -= reduce_by - item.save() + items_to_save.append(item) break # Harder case, this item needs to be deleted, and any remainder # taken from the next items in the list. reduce_by -= item.quantity - item.delete() + items_to_delete.append(item) + + # Save the updated BuildItem objects + BuildItem.objects.bulk_update(items_to_save, ['quantity']) + + # Delete the remaining BuildItem objects + BuildItem.objects.filter(pk__in=[item.pk for item in items_to_delete]).delete() @property def allocated_stock(self): @@ -940,7 +992,10 @@ class Build(InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNo # List the allocated BuildItem objects for the given output allocated_items = output.items_to_install.all() - if (common.settings.prevent_build_output_complete_on_incompleted_tests() and output.hasRequiredTests() and not output.passedAllRequiredTests()): + required_tests = kwargs.get('required_tests', output.part.getRequiredTests()) + prevent_on_incomplete = kwargs.get('prevent_on_incomplete', common.settings.prevent_build_output_complete_on_incompleted_tests()) + + if (prevent_on_incomplete and not output.passedAllRequiredTests(required_tests=required_tests)): serial = output.serial raise ValidationError( _(f"Build output {serial} has not passed all required tests")) @@ -1276,7 +1331,7 @@ class BuildOrderAttachment(InvenTree.models.InvenTreeAttachment): build = models.ForeignKey(Build, on_delete=models.CASCADE, related_name='attachments') -class BuildLine(InvenTree.models.InvenTreeModel): +class BuildLine(report.mixins.InvenTreeReportMixin, InvenTree.models.InvenTreeModel): """A BuildLine object links a BOMItem to a Build. When a new Build is created, the BuildLine objects are created automatically. @@ -1293,7 +1348,8 @@ class BuildLine(InvenTree.models.InvenTreeModel): """ class Meta: - """Model meta options""" + """Model meta options.""" + verbose_name = _('Build Order Line Item') unique_together = [ ('build', 'bom_item'), ] @@ -1303,6 +1359,19 @@ class BuildLine(InvenTree.models.InvenTreeModel): """Return the API URL used to access this model""" return reverse('api-build-line-list') + def report_context(self): + """Generate custom report context for this BuildLine object.""" + + return { + 'allocated_quantity': self.allocated_quantity, + 'allocations': self.allocations, + 'bom_item': self.bom_item, + 'build': self.build, + 'build_line': self, + 'part': self.bom_item.sub_part, + 'quantity': self.quantity, + } + build = models.ForeignKey( Build, on_delete=models.CASCADE, related_name='build_lines', help_text=_('Build object') @@ -1369,7 +1438,7 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): """ class Meta: - """Model meta options""" + """Model meta options.""" unique_together = [ ('build_line', 'stock_item', 'install_into'), ] @@ -1554,7 +1623,7 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): build_line = models.ForeignKey( BuildLine, - on_delete=models.SET_NULL, null=True, + on_delete=models.CASCADE, null=True, related_name='allocations', ) diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 0ae06ef18f..4be7409fde 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -1,7 +1,5 @@ """JSON serializers for Build API.""" -from decimal import Decimal - from django.db import transaction from django.core.exceptions import ValidationError as DjangoValidationError from django.utils.translation import gettext_lazy as _ @@ -15,16 +13,15 @@ from django.db.models.functions import Coalesce from rest_framework import serializers from rest_framework.serializers import ValidationError -from sql_util.utils import SubquerySum - from InvenTree.serializers import InvenTreeModelSerializer, InvenTreeAttachmentSerializer from InvenTree.serializers import UserSerializer import InvenTree.helpers -from InvenTree.serializers import InvenTreeDecimalField -from InvenTree.status_codes import BuildStatusGroups, StockStatus +from InvenTree.serializers import InvenTreeDecimalField, NotesFieldMixin +from stock.status_codes import StockStatus -from stock.models import generate_batch_code, StockItem, StockLocation +from stock.generators import generate_batch_code +from stock.models import StockItem, StockLocation from stock.serializers import StockItemSerializerBrief, LocationSerializer import common.models @@ -36,7 +33,7 @@ from users.serializers import OwnerSerializer from .models import Build, BuildLine, BuildItem, BuildOrderAttachment -class BuildSerializer(InvenTreeModelSerializer): +class BuildSerializer(NotesFieldMixin, InvenTreeModelSerializer): """Serializes a Build object.""" class Meta: @@ -239,6 +236,16 @@ class BuildOutputCreateSerializer(serializers.Serializer): The Build object is provided to the serializer context. """ + class Meta: + """Serializer metaclass.""" + fields = [ + 'quantity', + 'batch_code', + 'serial_numbers', + 'location', + 'auto_allocate', + ] + quantity = serializers.DecimalField( max_digits=15, decimal_places=5, @@ -288,6 +295,13 @@ class BuildOutputCreateSerializer(serializers.Serializer): help_text=_('Enter serial numbers for build outputs'), ) + location = serializers.PrimaryKeyRelatedField( + queryset=StockLocation.objects.all(), + label=_('Location'), + help_text=_('Stock location for build output'), + required=False, allow_null=True + ) + def validate_serial_numbers(self, serial_numbers): """Clean the provided serial number string""" serial_numbers = serial_numbers.strip() @@ -312,6 +326,11 @@ class BuildOutputCreateSerializer(serializers.Serializer): quantity = data['quantity'] serial_numbers = data.get('serial_numbers', '') + if part.trackable and not serial_numbers: + raise ValidationError({ + 'serial_numbers': _('Serial numbers must be provided for trackable parts') + }) + if serial_numbers: try: @@ -348,19 +367,15 @@ class BuildOutputCreateSerializer(serializers.Serializer): """Generate the new build output(s)""" data = self.validated_data - quantity = data['quantity'] - batch_code = data.get('batch_code', '') - auto_allocate = data.get('auto_allocate', False) - build = self.get_build() - user = self.context['request'].user build.create_build_output( - quantity, + data['quantity'], serials=self.serials, - batch=batch_code, - auto_allocate=auto_allocate, - user=user, + batch=data.get('batch_code', ''), + location=data.get('location', None), + auto_allocate=data.get('auto_allocate', False), + user=self.context['request'].user, ) @@ -553,10 +568,13 @@ class BuildOutputCompleteSerializer(serializers.Serializer): 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'] build.complete_build_output( @@ -565,6 +583,8 @@ class BuildOutputCompleteSerializer(serializers.Serializer): location=location, status=status, notes=notes, + required_tests=required_tests, + prevent_on_incomplete=prevent_on_incomplete, ) @@ -589,8 +609,8 @@ class BuildCancelSerializer(serializers.Serializer): } remove_allocated_stock = serializers.BooleanField( - label=_('Remove Allocated Stock'), - help_text=_('Subtract any stock which has already been allocated to this build'), + label=_('Consume Allocated Stock'), + help_text=_('Consume any stock which has already been allocated to this build'), required=False, default=False, ) @@ -611,7 +631,7 @@ class BuildCancelSerializer(serializers.Serializer): build.cancel_build( request.user, - remove_allocated_stock=data.get('remove_unallocated_stock', False), + remove_allocated_stock=data.get('remove_allocated_stock', False), remove_incomplete_outputs=data.get('remove_incomplete_outputs', False), ) @@ -633,6 +653,14 @@ class OverallocationChoice(): class BuildCompleteSerializer(serializers.Serializer): """DRF serializer for marking a BuildOrder as complete.""" + class Meta: + """Serializer metaclass""" + fields = [ + 'accept_overallocated', + 'accept_unallocated', + 'accept_incomplete', + ] + def get_context_data(self): """Retrieve extra context data for this serializer. @@ -711,10 +739,11 @@ class BuildCompleteSerializer(serializers.Serializer): build = self.context['build'] data = self.validated_data - if data.get('accept_overallocated', OverallocationChoice.REJECT) == OverallocationChoice.TRIM: - build.trim_allocated_stock() - build.complete_build(request.user) + build.complete_build( + request.user, + trim_allocated_stock=data.get('accept_overallocated', OverallocationChoice.REJECT) == OverallocationChoice.TRIM + ) class BuildUnallocationSerializer(serializers.Serializer): @@ -726,6 +755,13 @@ class BuildUnallocationSerializer(serializers.Serializer): - bom_item: Filter against a particular BOM line item """ + class Meta: + """Serializer metaclass""" + fields = [ + 'build_line', + 'output', + ] + build_line = serializers.PrimaryKeyRelatedField( queryset=BuildLine.objects.all(), many=False, @@ -994,17 +1030,24 @@ class BuildAutoAllocationSerializer(serializers.Serializer): def save(self): """Perform the auto-allocation step""" + + import build.tasks + import InvenTree.tasks + data = self.validated_data - build = self.context['build'] + build_order = self.context['build'] - build.auto_allocate_stock( + if not InvenTree.tasks.offload_task( + build.tasks.auto_allocate_build, + build_order.pk, location=data.get('location', None), exclude_location=data.get('exclude_location', None), interchangeable=data['interchangeable'], substitutes=data['substitutes'], - optional_items=data['optional_items'], - ) + optional_items=data['optional_items'] + ): + raise ValidationError(_("Failed to start auto-allocation task")) class BuildItemSerializer(InvenTreeModelSerializer): diff --git a/src/backend/InvenTree/build/status_codes.py b/src/backend/InvenTree/build/status_codes.py new file mode 100644 index 0000000000..463bd22059 --- /dev/null +++ b/src/backend/InvenTree/build/status_codes.py @@ -0,0 +1,20 @@ +"""Build status codes.""" + +from django.utils.translation import gettext_lazy as _ + +from generic.states import StatusCode + + +class BuildStatus(StatusCode): + """Build status codes.""" + + PENDING = 10, _('Pending'), 'secondary' # Build is pending / active + PRODUCTION = 20, _('Production'), 'primary' # BuildOrder is in production + CANCELLED = 30, _('Cancelled'), 'danger' # Build was cancelled + COMPLETE = 40, _('Complete'), 'success' # Build is complete + + +class BuildStatusGroups: + """Groups for BuildStatus codes.""" + + ACTIVE_CODES = [BuildStatus.PENDING.value, BuildStatus.PRODUCTION.value] diff --git a/src/backend/InvenTree/build/tasks.py b/src/backend/InvenTree/build/tasks.py index 9464930ccd..82828d642d 100644 --- a/src/backend/InvenTree/build/tasks.py +++ b/src/backend/InvenTree/build/tasks.py @@ -17,8 +17,8 @@ import InvenTree.email import InvenTree.helpers import InvenTree.helpers_model import InvenTree.tasks -from InvenTree.status_codes import BuildStatusGroups from InvenTree.ready import isImportingData +from build.status_codes import BuildStatusGroups import part.models as part_models @@ -26,6 +26,18 @@ import part.models as part_models logger = logging.getLogger('inventree') +def auto_allocate_build(build_id: int, **kwargs): + """Run auto-allocation for a specified BuildOrder.""" + + build_order = build.models.Build.objects.filter(pk=build_id).first() + + if not build_order: + logger.warning("Could not auto-allocate BuildOrder <%s> - BuildOrder does not exist", build_id) + return + + build_order.auto_allocate_stock(**kwargs) + + def complete_build_allocations(build_id: int, user_id: int): """Complete build allocations for a specified BuildOrder.""" diff --git a/src/backend/InvenTree/build/templates/build/build_base.html b/src/backend/InvenTree/build/templates/build/build_base.html index 4ead85bca8..8254673fc7 100644 --- a/src/backend/InvenTree/build/templates/build/build_base.html +++ b/src/backend/InvenTree/build/templates/build/build_base.html @@ -257,11 +257,7 @@ src="{% static 'img/blank_image.png' %}" {% if report_enabled %} $('#print-build-report').click(function() { - printReports({ - items: [{{ build.pk }}], - key: 'build', - url: '{% url "api-build-report-list" %}', - }); + printReports('build', [{{ build.pk }}]); }); {% endif %} diff --git a/src/backend/InvenTree/build/templates/build/detail.html b/src/backend/InvenTree/build/templates/build/detail.html index 3d2e5d4e96..138f0a14d4 100644 --- a/src/backend/InvenTree/build/templates/build/detail.html +++ b/src/backend/InvenTree/build/templates/build/detail.html @@ -346,6 +346,8 @@ onPanelLoad('notes', function() { 'build-notes', '{% url "api-build-detail" build.pk %}', { + model_type: 'build', + model_id: {{ build.pk }}, {% if roles.build.change %} editable: true, {% else %} @@ -366,6 +368,7 @@ onPanelLoad('outputs', function() { source_location: {{ build.take_from.pk }}, {% endif %} tracked_parts: true, + trackable: {% js_bool build.part.trackable %} }; loadBuildOutputTable(build_info); diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index 131dabaf3f..b240521db6 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -10,7 +10,8 @@ from part.models import Part from build.models import Build, BuildItem from stock.models import StockItem -from InvenTree.status_codes import BuildStatus, StockStatus +from build.status_codes import BuildStatus +from stock.status_codes import StockStatus from InvenTree.unit_test import InvenTreeAPITestCase @@ -223,6 +224,7 @@ class BuildTest(BuildAPITest): "status": 50, # Item requires attention }, expected_code=201, + max_query_count=450, # TODO: Try to optimize this ) self.assertEqual(self.build.incomplete_outputs.count(), 0) @@ -247,7 +249,7 @@ class BuildTest(BuildAPITest): expected_code=400 ) - self.assertTrue('accept_unallocated' in response.data) + self.assertIn('accept_unallocated', response.data) # Accept unallocated stock self.post( @@ -264,8 +266,35 @@ class BuildTest(BuildAPITest): self.assertTrue(self.build.is_complete) def test_cancel(self): - """Test that we can cancel a BuildOrder via the API.""" - bo = Build.objects.get(pk=1) + """Test that we can cancel a BuildOrder via the API. + + - First test that all stock is returned to stock + - Second test that stock is consumed by the build order + """ + + def make_new_build(ref): + """Make a new build order, and allocate stock to it.""" + + data = self.post( + reverse('api-build-list'), + { + 'part': 100, + 'quantity': 10, + 'title': 'Test build', + 'reference': ref, + }, + expected_code=201 + ).data + + build = Build.objects.get(pk=data['pk']) + + build.auto_allocate_stock() + + self.assertGreater(build.build_lines.count(), 0) + + return build + + bo = make_new_build('BO-12345') url = reverse('api-build-cancel', kwargs={'pk': bo.pk}) @@ -277,6 +306,23 @@ class BuildTest(BuildAPITest): self.assertEqual(bo.status, BuildStatus.CANCELLED) + # No items were "consumed" by this build + self.assertEqual(bo.consumed_stock.count(), 0) + + # Make another build, this time we will *consume* the allocated stock + bo = make_new_build('BO-12346') + + url = reverse('api-build-cancel', kwargs={'pk': bo.pk}) + + self.post(url, {'remove_allocated_stock': True}, expected_code=201) + + bo.refresh_from_db() + + self.assertEqual(bo.status, BuildStatus.CANCELLED) + + # This time, there should be *consumed* stock + self.assertGreater(bo.consumed_stock.count(), 0) + def test_delete(self): """Test that we can delete a BuildOrder via the API""" bo = Build.objects.get(pk=1) @@ -934,7 +980,7 @@ class BuildOverallocationTest(BuildAPITest): {}, expected_code=400 ) - self.assertTrue('accept_overallocated' in response.data) + self.assertIn('accept_overallocated', response.data) # Check stock items have not reduced at all for si, oq, _ in self.state.values(): @@ -948,6 +994,7 @@ class BuildOverallocationTest(BuildAPITest): 'accept_overallocated': 'accept', }, expected_code=201, + max_query_count=550, # TODO: Come back and refactor this ) self.build.refresh_from_db() @@ -968,6 +1015,7 @@ class BuildOverallocationTest(BuildAPITest): 'accept_overallocated': 'trim', }, expected_code=201, + max_query_count=550, # TODO: Come back and refactor this ) self.build.refresh_from_db() diff --git a/src/backend/InvenTree/build/tests.py b/src/backend/InvenTree/build/tests.py index 904f2a3a62..4dd7ee0fee 100644 --- a/src/backend/InvenTree/build/tests.py +++ b/src/backend/InvenTree/build/tests.py @@ -11,7 +11,7 @@ from InvenTree.unit_test import InvenTreeTestCase from .models import Build from stock.models import StockItem -from InvenTree.status_codes import BuildStatus +from build.status_codes import BuildStatus class BuildTestSimple(InvenTreeTestCase): diff --git a/src/backend/InvenTree/build/views.py b/src/backend/InvenTree/build/views.py index 36422e1688..2668b0fe99 100644 --- a/src/backend/InvenTree/build/views.py +++ b/src/backend/InvenTree/build/views.py @@ -5,7 +5,7 @@ from django.views.generic import DetailView, ListView from .models import Build from InvenTree.views import InvenTreeRoleMixin -from InvenTree.status_codes import BuildStatus +from build.status_codes import BuildStatus from plugin.views import InvenTreePluginViewMixin diff --git a/src/backend/InvenTree/common/admin.py b/src/backend/InvenTree/common/admin.py index 528f705c3a..9dd3a05018 100644 --- a/src/backend/InvenTree/common/admin.py +++ b/src/backend/InvenTree/common/admin.py @@ -7,6 +7,15 @@ from import_export.admin import ImportExportModelAdmin import common.models +@admin.register(common.models.ProjectCode) +class ProjectCodeAdmin(ImportExportModelAdmin): + """Admin settings for ProjectCode.""" + + list_display = ('code', 'description') + + search_fields = ('code', 'description') + + class SettingsAdmin(ImportExportModelAdmin): """Admin settings for InvenTreeSetting.""" diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index bba5ac766b..3d1cda90f6 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -127,6 +127,7 @@ class CurrencyExchangeView(APIView): permission_classes = [permissions.IsAuthenticated] serializer_class = None + @extend_schema(responses={200: common.serializers.CurrencyExchangeSerializer}) def get(self, request, format=None): """Return information on available currency conversions.""" # Extract a list of all available rates @@ -356,6 +357,22 @@ class NotificationMessageMixin: serializer_class = common.serializers.NotificationMessageSerializer permission_classes = [UserSettingsPermissions] + def get_queryset(self): + """Return prefetched queryset.""" + queryset = ( + super() + .get_queryset() + .prefetch_related( + 'source_content_type', + 'source_object', + 'target_content_type', + 'target_object', + 'user', + ) + ) + + return queryset + class NotificationList(NotificationMessageMixin, BulkDeleteMixin, ListAPI): """List view for all notifications of the current user.""" @@ -462,6 +479,10 @@ class NotesImageList(ListCreateAPI): serializer_class = common.serializers.NotesImageSerializer permission_classes = [permissions.IsAuthenticated] + filter_backends = SEARCH_ORDER_FILTER + + search_fields = ['user', 'model_type', 'model_id'] + def perform_create(self, serializer): """Create (upload) a new notes image.""" image = serializer.save() diff --git a/src/backend/InvenTree/common/currency.py b/src/backend/InvenTree/common/currency.py new file mode 100644 index 0000000000..c77549c550 --- /dev/null +++ b/src/backend/InvenTree/common/currency.py @@ -0,0 +1,229 @@ +"""Helper functions for currency support.""" + +import decimal +import logging +import math + +from django.core.cache import cache +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +from moneyed import CURRENCIES + +import InvenTree.helpers + +logger = logging.getLogger('inventree') + + +def currency_code_default(): + """Returns the default currency code (or USD if not specified).""" + from common.models import InvenTreeSetting + + try: + cached_value = cache.get('currency_code_default', '') + except Exception: + cached_value = None + + if cached_value: + return cached_value + + try: + code = InvenTreeSetting.get_setting( + 'INVENTREE_DEFAULT_CURRENCY', backup_value='', create=True, cache=True + ) + except Exception: # pragma: no cover + # Database may not yet be ready, no need to throw an error here + code = '' + + if code not in CURRENCIES: + code = 'USD' # pragma: no cover + + # Cache the value for a short amount of time + try: + cache.set('currency_code_default', code, 30) + except Exception: + pass + + return code + + +def all_currency_codes() -> list: + """Returns a list of all currency codes.""" + return [(a, CURRENCIES[a].name) for a in CURRENCIES] + + +def currency_codes_default_list() -> str: + """Return a comma-separated list of default currency codes.""" + return 'AUD,CAD,CNY,EUR,GBP,JPY,NZD,USD' + + +def currency_codes() -> list: + """Returns the current currency codes.""" + from common.models import InvenTreeSetting + + codes = InvenTreeSetting.get_setting('CURRENCY_CODES', '', create=False).strip() + + if not codes: + codes = currency_codes_default_list() + + codes = codes.split(',') + + valid_codes = [] + + for code in codes: + code = code.strip().upper() + + if code in valid_codes: + continue + + if code in CURRENCIES: + valid_codes.append(code) + else: + logger.warning(f"Invalid currency code: '{code}'") + + if len(valid_codes) == 0: + valid_codes = list(currency_codes_default_list().split(',')) + + return valid_codes + + +def currency_code_mappings() -> list: + """Returns the current currency choices.""" + return [(a, CURRENCIES[a].name) for a in currency_codes()] + + +def after_change_currency(setting) -> None: + """Callback function when base currency is changed. + + - Update exchange rates + - Recalculate prices for all parts + """ + import InvenTree.ready + import InvenTree.tasks + + if InvenTree.ready.isImportingData(): + return + + if not InvenTree.ready.canAppAccessDatabase(): + return + + from part import tasks as part_tasks + + # Immediately update exchange rates + InvenTree.tasks.update_exchange_rates(force=True) + + # Offload update of part prices to a background task + InvenTree.tasks.offload_task(part_tasks.check_missing_pricing, force_async=True) + + +def validate_currency_codes(value): + """Validate the currency codes.""" + values = value.strip().split(',') + + valid_currencies = set() + + for code in values: + code = code.strip().upper() + + if not code: + continue + + if code not in CURRENCIES: + raise ValidationError(_('Invalid currency code') + f": '{code}'") + elif code in valid_currencies: + raise ValidationError(_('Duplicate currency code') + f": '{code}'") + else: + valid_currencies.add(code) + + if len(valid_currencies) == 0: + raise ValidationError(_('No valid currency codes provided')) + + return list(valid_currencies) + + +def currency_exchange_plugins() -> list: + """Return a list of plugin choices which can be used for currency exchange.""" + try: + from plugin import registry + + plugs = registry.with_mixin('currencyexchange', active=True) + except Exception: + plugs = [] + + return [('', _('No plugin'))] + [(plug.slug, plug.human_name) for plug in plugs] + + +def get_price( + instance, + quantity, + moq=True, + multiples=True, + currency=None, + break_name: str = 'price_breaks', +): + """Calculate the price based on quantity price breaks. + + - Don't forget to add in flat-fee cost (base_cost field) + - If MOQ (minimum order quantity) is required, bump quantity + - If order multiples are to be observed, then we need to calculate based on that, too + """ + from common.currency import currency_code_default + + if hasattr(instance, break_name): + price_breaks = getattr(instance, break_name).all() + else: + price_breaks = [] + + # No price break information available? + if len(price_breaks) == 0: + return None + + # Check if quantity is fraction and disable multiples + multiples = quantity % 1 == 0 + + # Order multiples + if multiples: + quantity = int(math.ceil(quantity / instance.multiple) * instance.multiple) + + pb_found = False + pb_quantity = -1 + pb_cost = 0.0 + + if currency is None: + # Default currency selection + currency = currency_code_default() + + pb_min = None + for pb in price_breaks: + # Store smallest price break + if not pb_min: + pb_min = pb + + # Ignore this pricebreak (quantity is too high) + if pb.quantity > quantity: + continue + + pb_found = True + + # If this price-break quantity is the largest so far, use it! + if pb.quantity > pb_quantity: + pb_quantity = pb.quantity + + # Convert everything to the selected currency + pb_cost = pb.convert_to(currency) + + # Use smallest price break + if not pb_found and pb_min: + # Update price break information + pb_quantity = pb_min.quantity + pb_cost = pb_min.convert_to(currency) + # Trigger cost calculation using smallest price break + pb_found = True + + # Convert quantity to decimal.Decimal format + quantity = decimal.Decimal(f'{quantity}') + + if pb_found: + cost = pb_cost * quantity + return InvenTree.helpers.normalize(cost + instance.base_cost) + return None diff --git a/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py b/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py index 09b0100db4..116d139be8 100644 --- a/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py +++ b/src/backend/InvenTree/common/migrations/0010_migrate_currency_setting.py @@ -9,7 +9,7 @@ def set_default_currency(apps, schema_editor): # get value from settings-file base_currency = get_setting('INVENTREE_BASE_CURRENCY', 'base_currency', 'USD') - from common.settings import currency_codes + from common.currency import currency_codes # check if value is valid if base_currency not in currency_codes(): diff --git a/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py b/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py new file mode 100644 index 0000000000..a3b964cbaa --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0023_auto_20240602_1332.py @@ -0,0 +1,73 @@ +# Generated by Django 4.2.12 on 2024-06-02 13:32 + +from django.db import migrations + +from moneyed import CURRENCIES + +import InvenTree.config + + +def set_currencies(apps, schema_editor): + """Set the default currency codes. + + Ref: https://github.com/inventree/InvenTree/pull/7390 + + Previously, the allowed currency codes were set in the external configuration + (e.g via the configuration file or environment variables). + + Now, they are set in the database (via the InvenTreeSetting model). + + So, this data migration exists to transfer any configured currency codes, + from the external configuration, into the database settings model. + """ + + InvenTreeSetting = apps.get_model('common', 'InvenTreeSetting') + + key = 'CURRENCY_CODES' + + codes = InvenTree.config.get_setting('INVENTREE_CURRENCIES', 'currencies', None) + + if codes is None: + # No currency codes are defined in the configuration file + return + + if type(codes) == str: + codes = codes.split(',') + + valid_codes = set() + + for code in codes: + code = code.strip().upper() + + if code in CURRENCIES: + valid_codes.add(code) + + if len(valid_codes) == 0: + print(f"No valid currency codes found in configuration file") + return + + value = ','.join(valid_codes) + print(f"Found existing currency codes:", value) + + setting = InvenTreeSetting.objects.filter(key=key).first() + + if setting: + print(f"- Updating existing setting for currency codes") + setting.value = value + setting.save() + else: + print(f"- Creating new setting for currency codes") + setting = InvenTreeSetting(key=key, value=value) + setting.save() + + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0022_projectcode_responsible'), + ] + + operations = [ + migrations.RunPython(set_currencies, reverse_code=migrations.RunPython.noop) + ] diff --git a/src/backend/InvenTree/common/migrations/0024_notesimage_model_id_notesimage_model_type.py b/src/backend/InvenTree/common/migrations/0024_notesimage_model_id_notesimage_model_type.py new file mode 100644 index 0000000000..24467f9ba2 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0024_notesimage_model_id_notesimage_model_type.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.12 on 2024-05-22 12:27 + +import common.validators +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('common', '0023_auto_20240602_1332'), + ] + + operations = [ + migrations.AddField( + model_name='notesimage', + name='model_id', + field=models.IntegerField(blank=True, default=None, help_text='Target model ID for this image', null=True), + ), + migrations.AddField( + model_name='notesimage', + name='model_type', + field=models.CharField(blank=True, null=True, help_text='Target model type for this image', max_length=100, validators=[common.validators.validate_notes_model_type]), + ), + ] diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 514a573a38..b4edd79cb1 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -4,14 +4,11 @@ These models are 'generic' and do not fit a particular business logic object. """ import base64 -import decimal import hashlib import hmac import json import logging -import math import os -import re import uuid from datetime import timedelta, timezone from enum import Enum @@ -19,13 +16,13 @@ from secrets import compare_digest from typing import Any, Callable, TypedDict, Union from django.apps import apps -from django.conf import settings +from django.conf import settings as django_settings from django.contrib.auth.models import Group, User 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 AppRegistryNotReady, ValidationError +from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator, URLValidator from django.db import models, transaction from django.db.models.signals import post_delete, post_save @@ -37,10 +34,11 @@ from django.utils.translation import gettext_lazy as _ from djmoney.contrib.exchange.exceptions import MissingRate from djmoney.contrib.exchange.models import convert_money -from djmoney.settings import CURRENCY_CHOICES from rest_framework.exceptions import PermissionDenied import build.validators +import common.currency +import common.validators import InvenTree.fields import InvenTree.helpers import InvenTree.models @@ -101,7 +99,7 @@ class BaseURLValidator(URLValidator): value = str(value).strip() # If a configuration level value has been specified, prevent change - if settings.SITE_URL and value != settings.SITE_URL: + if django_settings.SITE_URL and value != django_settings.SITE_URL: raise ValidationError(_('Site URL is locked by configuration')) if len(value) == 0: @@ -561,7 +559,7 @@ class BaseInvenTreeSetting(models.Model): create = kwargs.pop('create', True) # Specify if cache lookup should be performed - do_cache = kwargs.pop('cache', False) + do_cache = kwargs.pop('cache', django_settings.GLOBAL_CACHE_ENABLED) # Prevent saving to the database during data import if InvenTree.ready.isImportingData(): @@ -749,6 +747,7 @@ class BaseInvenTreeSetting(models.Model): attempts=attempts - 1, **kwargs, ) + except (OperationalError, ProgrammingError): logger.warning("Database is locked, cannot set setting '%s'", key) # Likely the DB is locked - not much we can do here @@ -1116,7 +1115,7 @@ def settings_group_options(): def update_instance_url(setting): """Update the first site objects domain to url.""" - if not settings.SITE_MULTI: + if not django_settings.SITE_MULTI: return try: @@ -1132,7 +1131,7 @@ def update_instance_url(setting): def update_instance_name(setting): """Update the first site objects name to instance name.""" - if not settings.SITE_MULTI: + if not django_settings.SITE_MULTI: return try: @@ -1146,52 +1145,6 @@ def update_instance_name(setting): site_obj.save() -def validate_email_domains(setting): - """Validate the email domains setting.""" - if not setting.value: - return - - domains = setting.value.split(',') - for domain in domains: - if not domain: - raise ValidationError(_('An empty domain is not allowed.')) - if not re.match(r'^@[a-zA-Z0-9\.\-_]+$', domain): - raise ValidationError(_(f'Invalid domain name: {domain}')) - - -def currency_exchange_plugins(): - """Return a set of plugin choices which can be used for currency exchange.""" - try: - from plugin import registry - - plugs = registry.with_mixin('currencyexchange', active=True) - except Exception: - plugs = [] - - return [('', _('No plugin'))] + [(plug.slug, plug.human_name) for plug in plugs] - - -def after_change_currency(setting): - """Callback function when base currency is changed. - - - Update exchange rates - - Recalculate prices for all parts - """ - if InvenTree.ready.isImportingData(): - return - - if not InvenTree.ready.canAppAccessDatabase(): - return - - from part import tasks as part_tasks - - # Immediately update exchange rates - InvenTree.tasks.update_exchange_rates(force=True) - - # Offload update of part prices to a background task - InvenTree.tasks.offload_task(part_tasks.check_missing_pricing, force_async=True) - - def reload_plugin_registry(setting): """When a core plugin setting is changed, reload the plugin registry.""" from plugin import registry @@ -1304,8 +1257,15 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'name': _('Default Currency'), 'description': _('Select base currency for pricing calculations'), 'default': 'USD', - 'choices': CURRENCY_CHOICES, - 'after_save': after_change_currency, + 'choices': common.currency.currency_code_mappings, + 'after_save': common.currency.after_change_currency, + }, + 'CURRENCY_CODES': { + 'name': _('Supported Currencies'), + 'description': _('List of supported currency codes'), + 'default': common.currency.currency_codes_default_list(), + 'validator': common.currency.validate_currency_codes, + 'after_save': common.currency.after_change_currency, }, 'CURRENCY_UPDATE_INTERVAL': { 'name': _('Currency Update Interval'), @@ -1319,7 +1279,7 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'CURRENCY_UPDATE_PLUGIN': { 'name': _('Currency Update Plugin'), 'description': _('Currency update plugin to use'), - 'choices': currency_exchange_plugins, + 'choices': common.currency.currency_exchange_plugins, 'default': 'inventreecurrencyexchange', }, 'INVENTREE_DOWNLOAD_FROM_URL': { @@ -1436,6 +1396,12 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'validator': bool, 'default': True, }, + 'PART_ALLOW_DELETE_FROM_ASSEMBLY': { + 'name': _('Allow Deletion from Assembly'), + 'description': _('Allow deletion of parts which are used in an assembly'), + 'validator': bool, + 'default': False, + }, 'PART_IPN_REGEX': { 'name': _('IPN Regex'), 'description': _('Regular expression pattern for matching Part IPN'), @@ -1570,7 +1536,12 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'Minimum number of decimal places to display when rendering pricing data' ), 'default': 0, - 'validator': [int, MinValueValidator(0), MaxValueValidator(4)], + 'validator': [ + int, + MinValueValidator(0), + MaxValueValidator(4), + common.validators.validate_decimal_places_min, + ], }, 'PRICING_DECIMAL_PLACES': { 'name': _('Maximum Pricing Decimal Places'), @@ -1578,7 +1549,12 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'Maximum number of decimal places to display when rendering pricing data' ), 'default': 6, - 'validator': [int, MinValueValidator(2), MaxValueValidator(6)], + 'validator': [ + int, + MinValueValidator(2), + MaxValueValidator(6), + common.validators.validate_decimal_places_max, + ], }, 'PRICING_USE_SUPPLIER_PRICING': { 'name': _('Use Supplier Pricing'), @@ -1781,6 +1757,14 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': True, 'validator': bool, }, + 'STOCK_ALLOW_OUT_OF_STOCK_TRANSFER': { + 'name': _('Allow Out of Stock Transfer'), + 'description': _( + 'Allow stock items which are not in stock to be transferred between stock locations' + ), + 'default': False, + 'validator': bool, + }, 'BUILDORDER_REFERENCE_PATTERN': { 'name': _('Build Order Reference Pattern'), 'description': _( @@ -1859,6 +1843,14 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'default': False, 'validator': bool, }, + 'SALESORDER_SHIP_COMPLETE': { + 'name': _('Mark Shipped Orders as Complete'), + 'description': _( + 'Sales orders marked as shipped will automatically be completed, bypassing the "shipped" status' + ), + 'default': False, + 'validator': bool, + }, 'PURCHASEORDER_REFERENCE_PATTERN': { 'name': _('Purchase Order Reference Pattern'), 'description': _( @@ -1948,7 +1940,7 @@ class InvenTreeSetting(BaseInvenTreeSetting): 'Restrict signup to certain domains (comma-separated, starting with @)' ), 'default': '', - 'before_save': validate_email_domains, + 'before_save': common.validators.validate_email_domains, }, 'SIGNUP_GROUP': { 'name': _('Group on signup'), @@ -2544,82 +2536,6 @@ class PriceBreak(MetaMixin): return converted.amount -def get_price( - instance, - quantity, - moq=True, - multiples=True, - currency=None, - break_name: str = 'price_breaks', -): - """Calculate the price based on quantity price breaks. - - - Don't forget to add in flat-fee cost (base_cost field) - - If MOQ (minimum order quantity) is required, bump quantity - - If order multiples are to be observed, then we need to calculate based on that, too - """ - from common.settings import currency_code_default - - if hasattr(instance, break_name): - price_breaks = getattr(instance, break_name).all() - else: - price_breaks = [] - - # No price break information available? - if len(price_breaks) == 0: - return None - - # Check if quantity is fraction and disable multiples - multiples = quantity % 1 == 0 - - # Order multiples - if multiples: - quantity = int(math.ceil(quantity / instance.multiple) * instance.multiple) - - pb_found = False - pb_quantity = -1 - pb_cost = 0.0 - - if currency is None: - # Default currency selection - currency = currency_code_default() - - pb_min = None - for pb in price_breaks: - # Store smallest price break - if not pb_min: - pb_min = pb - - # Ignore this pricebreak (quantity is too high) - if pb.quantity > quantity: - continue - - pb_found = True - - # If this price-break quantity is the largest so far, use it! - if pb.quantity > pb_quantity: - pb_quantity = pb.quantity - - # Convert everything to the selected currency - pb_cost = pb.convert_to(currency) - - # Use smallest price break - if not pb_found and pb_min: - # Update price break information - pb_quantity = pb_min.quantity - pb_cost = pb_min.convert_to(currency) - # Trigger cost calculation using smallest price break - pb_found = True - - # Convert quantity to decimal.Decimal format - quantity = decimal.Decimal(f'{quantity}') - - if pb_found: - cost = pb_cost * quantity - return InvenTree.helpers.normalize(cost + instance.base_cost) - return None - - class ColorTheme(models.Model): """Color Theme Setting.""" @@ -2630,14 +2546,14 @@ class ColorTheme(models.Model): @classmethod def get_color_themes_choices(cls): """Get all color themes from static folder.""" - if not settings.STATIC_COLOR_THEMES_DIR.exists(): + if not django_settings.STATIC_COLOR_THEMES_DIR.exists(): logger.error('Theme directory does not exist') return [] # Get files list from css/color-themes/ folder files_list = [] - for file in settings.STATIC_COLOR_THEMES_DIR.iterdir(): + for file in django_settings.STATIC_COLOR_THEMES_DIR.iterdir(): files_list.append([file.stem, file.suffix]) # Get color themes choices (CSS sheets) @@ -2988,7 +2904,7 @@ class NotificationMessage(models.Model): # Add timezone information if TZ is enabled (in production mode mostly) delta = now() - ( self.creation.replace(tzinfo=timezone.utc) - if settings.USE_TZ + if django_settings.USE_TZ else self.creation ) return delta.seconds @@ -3037,7 +2953,7 @@ def rename_notes_image(instance, filename): class NotesImage(models.Model): """Model for storing uploading images for the 'notes' fields of various models. - Simply stores the image file, for use in the 'notes' field (of any models which support markdown) + Simply stores the image file, for use in the 'notes' field (of any models which support markdown). """ image = models.ImageField( @@ -3048,6 +2964,21 @@ class NotesImage(models.Model): date = models.DateTimeField(auto_now_add=True) + model_type = models.CharField( + max_length=100, + blank=True, + null=True, + validators=[common.validators.validate_notes_model_type], + help_text=_('Target model type for this image'), + ) + + model_id = models.IntegerField( + help_text=_('Target model ID for this image'), + blank=True, + null=True, + default=None, + ) + class CustomUnit(models.Model): """Model for storing custom physical unit definitions. diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index 5bc1759d9a..c3539a7a61 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -125,6 +125,17 @@ class UserSettingsSerializer(SettingsSerializer): user = serializers.PrimaryKeyRelatedField(read_only=True) +class CurrencyExchangeSerializer(serializers.Serializer): + """Serializer for a Currency Exchange request. + + It's only purpose is describing the results correctly in the API schema right now. + """ + + base_currency = serializers.CharField(read_only=True) + exchange_rates = serializers.DictField(child=serializers.FloatField()) + updated = serializers.DateTimeField(read_only=True) + + class GenericReferencedSettingSerializer(SettingsSerializer): """Serializer for a GenericReferencedSetting model. @@ -270,7 +281,7 @@ class NotesImageSerializer(InvenTreeModelSerializer): """Meta options for NotesImageSerializer.""" model = common_models.NotesImage - fields = ['pk', 'image', 'user', 'date'] + fields = ['pk', 'image', 'user', 'date', 'model_type', 'model_id'] read_only_fields = ['date', 'user'] diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index 3380def996..67a96c3510 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -1,61 +1,5 @@ """User-configurable settings for the common app.""" -import logging - -from django.conf import settings -from django.core.cache import cache - -from moneyed import CURRENCIES - -logger = logging.getLogger('inventree') - - -def currency_code_default(): - """Returns the default currency code (or USD if not specified).""" - from common.models import InvenTreeSetting - - try: - cached_value = cache.get('currency_code_default', '') - except Exception: - cached_value = None - - if cached_value: - return cached_value - - try: - code = InvenTreeSetting.get_setting( - 'INVENTREE_DEFAULT_CURRENCY', backup_value='', create=True, cache=True - ) - except Exception: # pragma: no cover - # Database may not yet be ready, no need to throw an error here - code = '' - - if code not in CURRENCIES: - code = 'USD' # pragma: no cover - - # Cache the value for a short amount of time - try: - cache.set('currency_code_default', code, 30) - except Exception: - pass - - return code - - -def all_currency_codes(): - """Returns a list of all currency codes.""" - return [(a, CURRENCIES[a].name) for a in CURRENCIES] - - -def currency_code_mappings(): - """Returns the current currency choices.""" - return [(a, CURRENCIES[a].name) for a in settings.CURRENCIES] - - -def currency_codes(): - """Returns the current currency codes.""" - return list(settings.CURRENCIES) - def stock_expiry_enabled(): """Returns True if the stock expiry feature is enabled.""" diff --git a/src/backend/InvenTree/common/tasks.py b/src/backend/InvenTree/common/tasks.py index 92a666cfe7..ffb67311b9 100644 --- a/src/backend/InvenTree/common/tasks.py +++ b/src/backend/InvenTree/common/tasks.py @@ -55,7 +55,7 @@ def update_news_feed(): # Fetch and parse feed try: - feed = requests.get(settings.INVENTREE_NEWS_URL) + feed = requests.get(settings.INVENTREE_NEWS_URL, timeout=30) d = feedparser.parse(feed.content) except Exception: # pragma: no cover logger.warning('update_news_feed: Error parsing the newsfeed') diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index 6a5b26766d..7aad13713c 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -50,7 +50,7 @@ class SettingsTest(InvenTreeTestCase): # There should be two settings objects in the database settings = InvenTreeSetting.objects.all() - self.assertTrue(settings.count() >= 2) + self.assertGreaterEqual(settings.count(), 2) instance_name = InvenTreeSetting.objects.get(pk=1) self.assertEqual(instance_name.key, 'INVENTREE_INSTANCE') @@ -207,7 +207,7 @@ class SettingsTest(InvenTreeTestCase): - Ensure that every setting key is valid - Ensure that a validator is supplied """ - self.assertTrue(type(setting) is dict) + self.assertIs(type(setting), dict) name = setting.get('name', None) @@ -372,6 +372,30 @@ class GlobalSettingsApiTest(InvenTreeAPITestCase): # Number of results should match the number of settings self.assertEqual(len(response.data), n_public_settings) + def test_currency_settings(self): + """Run tests for currency specific settings.""" + url = reverse('api-global-setting-detail', kwargs={'key': 'CURRENCY_CODES'}) + + response = self.patch(url, data={'value': 'USD,XYZ'}, expected_code=400) + + self.assertIn("Invalid currency code: 'XYZ'", str(response.data)) + + response = self.patch( + url, data={'value': 'AUD,USD, AUD,AUD,'}, expected_code=400 + ) + + self.assertIn("Duplicate currency code: 'AUD'", str(response.data)) + + response = self.patch(url, data={'value': ',,,,,'}, expected_code=400) + + self.assertIn('No valid currency codes provided', str(response.data)) + + response = self.patch(url, data={'value': 'AUD,USD,GBP'}, expected_code=200) + + codes = InvenTreeSetting.get_setting('CURRENCY_CODES') + + self.assertEqual(codes, 'AUD,USD,GBP') + def test_company_name(self): """Test a settings object lifecycle e2e.""" setting = InvenTreeSetting.get_setting_object('INVENTREE_COMPANY_NAME') @@ -726,7 +750,7 @@ class TaskListApiTests(InvenTreeAPITestCase): response = self.get(url, expected_code=200) for task in response.data: - self.assertTrue(task['name'] == 'time.sleep') + self.assertEqual(task['name'], 'time.sleep') class WebhookMessageTests(TestCase): @@ -1093,7 +1117,7 @@ class CurrencyAPITests(InvenTreeAPITestCase): # Updating via the external exchange may not work every time for _idx in range(5): - self.post(reverse('api-currency-refresh')) + self.post(reverse('api-currency-refresh'), expected_code=200) # There should be some new exchange rate objects now if Rate.objects.all().exists(): diff --git a/src/backend/InvenTree/common/validators.py b/src/backend/InvenTree/common/validators.py new file mode 100644 index 0000000000..36c66c7f12 --- /dev/null +++ b/src/backend/InvenTree/common/validators.py @@ -0,0 +1,70 @@ +"""Validation helpers for common models.""" + +import re + +from django.core.exceptions import ValidationError +from django.utils.translation import gettext_lazy as _ + +import InvenTree.helpers_model + + +def validate_notes_model_type(value): + """Ensure that the provided model type is valid. + + The provided value must map to a model which implements the 'InvenTreeNotesMixin'. + """ + import InvenTree.models + + if not value: + # Empty values are allowed + return + + model_types = list( + InvenTree.helpers_model.getModelsWithMixin(InvenTree.models.InvenTreeNotesMixin) + ) + + model_names = [model.__name__.lower() for model in model_types] + + if value.lower() not in model_names: + raise ValidationError(f"Invalid model type '{value}'") + + +def validate_decimal_places_min(value): + """Validator for PRICING_DECIMAL_PLACES_MIN setting.""" + from common.models import InvenTreeSetting + + try: + value = int(value) + places_max = int(InvenTreeSetting.get_setting('PRICING_DECIMAL_PLACES')) + except Exception: + return + + if value > places_max: + raise ValidationError(_('Minimum places cannot be greater than maximum places')) + + +def validate_decimal_places_max(value): + """Validator for PRICING_DECIMAL_PLACES_MAX setting.""" + from common.models import InvenTreeSetting + + try: + value = int(value) + places_min = int(InvenTreeSetting.get_setting('PRICING_DECIMAL_PLACES_MIN')) + except Exception: + return + + if value < places_min: + raise ValidationError(_('Maximum places cannot be less than minimum places')) + + +def validate_email_domains(setting): + """Validate the email domains setting.""" + if not setting.value: + return + + domains = setting.value.split(',') + for domain in domains: + if not domain: + raise ValidationError(_('An empty domain is not allowed.')) + if not re.match(r'^@[a-zA-Z0-9\.\-_]+$', domain): + raise ValidationError(_(f'Invalid domain name: {domain}')) diff --git a/src/backend/InvenTree/company/admin.py b/src/backend/InvenTree/company/admin.py index 69136ad80c..7caf7f3b16 100644 --- a/src/backend/InvenTree/company/admin.py +++ b/src/backend/InvenTree/company/admin.py @@ -213,6 +213,8 @@ class AddressAdmin(ImportExportModelAdmin): search_fields = ['company', 'country', 'postal_code'] + autocomplete_fields = ['company'] + class ContactResource(InvenTreeResource): """Class for managing Contact data import/export.""" @@ -237,3 +239,5 @@ class ContactAdmin(ImportExportModelAdmin): list_display = ('company', 'name', 'role', 'email', 'phone') search_fields = ['company', 'name', 'email'] + + autocomplete_fields = ['company'] diff --git a/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py b/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py index 117710daa7..f0db3f5f38 100644 --- a/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py +++ b/src/backend/InvenTree/company/migrations/0025_auto_20201110_1001.py @@ -2,6 +2,7 @@ from django.db import migrations, connection import djmoney.models.fields +import common.currency import common.settings @@ -16,11 +17,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='supplierpricebreak', name='price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), ), migrations.AddField( model_name='supplierpricebreak', name='price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py b/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py index f26f470191..10c22b3367 100644 --- a/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py +++ b/src/backend/InvenTree/company/migrations/0040_alter_company_currency.py @@ -1,6 +1,7 @@ # Generated by Django 3.2.4 on 2021-07-02 13:21 import InvenTree.validators +import common.currency import common.settings from django.db import migrations, models @@ -15,6 +16,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='company', name='currency', - field=models.CharField(blank=True, default=common.settings.currency_code_default, help_text='Default currency used for this company', max_length=3, validators=[InvenTree.validators.validate_currency_code], verbose_name='Currency'), + field=models.CharField(blank=True, default=common.currency.currency_code_default, help_text='Default currency used for this company', max_length=3, validators=[InvenTree.validators.validate_currency_code], verbose_name='Currency'), ), ] diff --git a/src/backend/InvenTree/company/models.py b/src/backend/InvenTree/company/models.py index b891b5b065..30b2dc5789 100644 --- a/src/backend/InvenTree/company/models.py +++ b/src/backend/InvenTree/company/models.py @@ -1,7 +1,6 @@ """Company database model definitions.""" import os -from datetime import datetime from decimal import Decimal from django.apps import apps @@ -20,6 +19,7 @@ from moneyed import CURRENCIES from stdimage.models import StdImageField from taggit.managers import TaggableManager +import common.currency import common.models import common.settings import InvenTree.conversion @@ -29,9 +29,9 @@ import InvenTree.models import InvenTree.ready import InvenTree.tasks import InvenTree.validators -from common.settings import currency_code_default +from common.currency import currency_code_default from InvenTree.fields import InvenTreeURLField, RoundingDecimalField -from InvenTree.status_codes import PurchaseOrderStatusGroups +from order.status_codes import PurchaseOrderStatusGroups def rename_company_image(instance, filename): @@ -212,7 +212,7 @@ class Company( code = self.currency if code not in CURRENCIES: - code = common.settings.currency_code_default() + code = common.currency.currency_code_default() return code @@ -513,6 +513,7 @@ class ManufacturerPart( null=True, verbose_name=_('Link'), help_text=_('URL for external manufacturer part link'), + max_length=2000, ) description = models.CharField( @@ -829,6 +830,7 @@ class SupplierPart( null=True, verbose_name=_('Link'), help_text=_('URL for external supplier part link'), + max_length=2000, ) description = models.CharField( @@ -965,7 +967,7 @@ class SupplierPart( SupplierPriceBreak.objects.create(part=self, quantity=quantity, price=price) - get_price = common.models.get_price + get_price = common.currency.get_price def open_orders(self): """Return a database query for PurchaseOrder line items for this SupplierPart, limited to purchase orders that are open / outstanding.""" diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index e329ea44e6..c0425c68db 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -18,6 +18,7 @@ from InvenTree.serializers import ( InvenTreeModelSerializer, InvenTreeMoneySerializer, InvenTreeTagModelSerializer, + NotesFieldMixin, RemoteImageMixin, ) from part.serializers import PartBriefSerializer @@ -102,7 +103,7 @@ class AddressBriefSerializer(InvenTreeModelSerializer): ] -class CompanySerializer(RemoteImageMixin, InvenTreeModelSerializer): +class CompanySerializer(NotesFieldMixin, RemoteImageMixin, InvenTreeModelSerializer): """Serializer for Company object (full detail).""" class Meta: diff --git a/src/backend/InvenTree/company/templates/company/detail.html b/src/backend/InvenTree/company/templates/company/detail.html index 7d380d7c2f..afc6a813ea 100644 --- a/src/backend/InvenTree/company/templates/company/detail.html +++ b/src/backend/InvenTree/company/templates/company/detail.html @@ -305,6 +305,8 @@ '{% url "api-company-detail" company.pk %}', { editable: true, + model_type: "company", + model_id: {{ company.pk }}, } ); }); diff --git a/src/backend/InvenTree/company/test_api.py b/src/backend/InvenTree/company/test_api.py index 332292ca3c..65b55089a3 100644 --- a/src/backend/InvenTree/company/test_api.py +++ b/src/backend/InvenTree/company/test_api.py @@ -130,7 +130,7 @@ class CompanyTest(InvenTreeAPITestCase): expected_code=400, ) - self.assertTrue('currency' in response.data) + self.assertIn('currency', response.data) def test_company_active(self): """Test that the 'active' value and filter works.""" diff --git a/src/backend/InvenTree/company/tests.py b/src/backend/InvenTree/company/tests.py index a789b951d4..351fee268d 100644 --- a/src/backend/InvenTree/company/tests.py +++ b/src/backend/InvenTree/company/tests.py @@ -286,7 +286,11 @@ class ManufacturerPartSimpleTest(TestCase): def test_delete(self): """Test deletion of a ManufacturerPart.""" - Part.objects.get(pk=self.part.id).delete() + part = Part.objects.get(pk=self.part.id) + part.active = False + part.save() + part.delete() + # Check that ManufacturerPart was deleted self.assertEqual(ManufacturerPart.objects.count(), 3) diff --git a/src/backend/InvenTree/config_template.yaml b/src/backend/InvenTree/config_template.yaml index e429aa2bea..d1b13a5e1c 100644 --- a/src/backend/InvenTree/config_template.yaml +++ b/src/backend/InvenTree/config_template.yaml @@ -1,3 +1,6 @@ +# InvenTree Configuration Template +# Ref: https://docs.inventree.org/en/stable/start/config/ +# Note: Environment variables take precedence over values set in this file # Secret key for backend # Use the environment variable INVENTREE_SECRET_KEY_FILE @@ -5,16 +8,10 @@ # Database backend selection - Configure backend database settings # Documentation: https://docs.inventree.org/en/latest/start/config/ - # Note: Database configuration options can also be specified from environmental variables, # with the prefix INVENTREE_DB_ # e.g INVENTREE_DB_NAME / INVENTREE_DB_USER / INVENTREE_DB_PASSWORD database: - # Uncomment (and edit) one of the database configurations below, - # or specify database options using environment variables - - # Refer to the django documentation for full list of options - # --- Available options: --- # ENGINE: Database engine. Selection from: # - mysql @@ -26,69 +23,30 @@ database: # HOST: Database host address (if required) # PORT: Database host port (if required) - # --- Database settings --- - #ENGINE: sampleengine - #NAME: '/path/to/database' - #USER: sampleuser - #PASSWORD: samplepassword - #HOST: samplehost - #PORT: 123456 - - # --- Example Configuration - MySQL --- - #ENGINE: mysql - #NAME: inventree - #USER: inventree - #PASSWORD: inventree_password - #HOST: 'localhost' - #PORT: '3306' - - # --- Example Configuration - Postgresql --- - #ENGINE: postgresql - #NAME: inventree - #USER: inventree - #PASSWORD: inventree_password - #HOST: 'localhost' - #PORT: '5432' - - # --- Example Configuration - sqlite3 --- - # ENGINE: sqlite3 - # NAME: '/home/inventree/database.sqlite3' - -# Set debug to False to run in production mode -# Use the environment variable INVENTREE_DEBUG +# Set debug to False to run in production mode, or use the environment variable INVENTREE_DEBUG debug: True -# Set to False to disable the admin interface (default = True) -# Or, use the environment variable INVENTREE_ADMIN_ENABLED +# Set to False to disable the admin interfac, or use the environment variable INVENTREE_ADMIN_ENABLED #admin_enabled: True -# Set the admin URL (default is 'admin') -# Or, use the environment variable INVENTREE_ADMIN_URL +# Set the admin URL, or use the environment variable INVENTREE_ADMIN_URL #admin_url: 'admin' -# Configure the system logging level -# Use environment variable INVENTREE_LOG_LEVEL +# Configure the system logging level (or use environment variable INVENTREE_LOG_LEVEL) # Options: DEBUG / INFO / WARNING / ERROR / CRITICAL log_level: WARNING -# Enable database-level logging -# Use the environment variable INVENTREE_DB_LOGGING +# Enable database-level logging, or use the environment variable INVENTREE_DB_LOGGING db_logging: False -# Select default system language (default is 'en-us') -# Use the environment variable INVENTREE_LANGUAGE +# Select default system language , or use the environment variable INVENTREE_LANGUAGE language: en-us -# System time-zone (default is UTC) -# Reference: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# System time-zone (default is UTC). Reference: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones timezone: UTC -# Base URL for the InvenTree server -# Use the environment variable INVENTREE_SITE_URL -# site_url: 'http://localhost:8000' - -# Base currency code (or use env var INVENTREE_BASE_CURRENCY) -base_currency: USD +# Base URL for the InvenTree server (or use the environment variable INVENTREE_SITE_URL) +site_url: 'http://localhost:8000' # Add new user on first startup by either adding values here or from a file #admin_user: admin @@ -96,17 +54,6 @@ base_currency: USD #admin_password: inventree #admin_password_file: '/etc/inventree/admin_password.txt' -# List of currencies supported by default. Add other currencies here to allow use in InvenTree -currencies: - - AUD - - CAD - - CNY - - EUR - - GBP - - JPY - - NZD - - USD - # Email backend configuration # Ref: https://docs.djangoproject.com/en/dev/topics/email/ # Alternatively, these options can all be set using environment variables, @@ -130,34 +77,18 @@ sentry_enabled: False #sentry_sample_rate: 0.1 #sentry_dsn: https://custom@custom.ingest.sentry.io/custom -# OpenTelemetry tracing/metrics - disabled by default +# OpenTelemetry tracing/metrics - disabled by default - refer to the documentation for full list of options # This can be used to send tracing data, logs and metrics to OpenTelemtry compatible backends -# See https://opentelemetry.io/ecosystem/vendors/ for a list of supported backends -# Alternatively, use environment variables eg. INVENTREE_TRACING_ENABLED, INVENTREE_TRACING_HEADERS, INVENTREE_TRACING_AUTH -#tracing: -# enabled: true -# endpoint: https://otlp-gateway-prod-eu-west-0.grafana.net/otlp -# headers: -# api-key: 'sample' -# auth: -# basic: -# username: '******' -# password: 'glc_****' -# is_http: true -# append_http: true -# console: false -# resources: -# CUSTOM_KEY: 'CUSTOM_VALUE' +tracing: + enabled: false -# Set this variable to True to enable InvenTree Plugins -# Alternatively, use the environment variable INVENTREE_PLUGINS_ENABLED +# Set this variable to True to enable InvenTree Plugins, or use the environment variable INVENTREE_PLUGINS_ENABLED plugins_enabled: False #plugin_noinstall: True #plugin_file: '/path/to/plugins.txt' #plugin_dir: '/path/to/plugins/' -# Set this variable to True to enable auto-migrations -# Alternatively, use the environment variable INVENTREE_AUTO_UPDATE +# Set this variable to True to enable auto-migrations, or use the environment variable INVENTREE_AUTO_UPDATE auto_update: False # Allowed hosts (see ALLOWED_HOSTS in Django settings documentation) @@ -181,6 +112,11 @@ use_x_forwarded_host: false # Override with the environment variable INVENTREE_USE_X_FORWARDED_PORT use_x_forwarded_port: false +# Cookie settings +cookie: + secure: false + samesite: none + # Cross Origin Resource Sharing (CORS) settings (see https://github.com/adamchainz/django-cors-headers) cors: allow_all: true @@ -207,6 +143,13 @@ background: timeout: 90 max_attempts: 5 +# External cache configuration (refer to the documentation for full list of options) +cache: + enabled: false + host: 'inventree-cache' + port: 6379 + + # Login configuration login_confirm_days: 3 login_attempts: 5 @@ -243,56 +186,13 @@ remote_login_header: HTTP_REMOTE_USER # github: # VERIFIED_EMAIL: true -# Add LDAP support -# ldap: -# enabled: false -# debug: false # enable debug mode to troubleshoot ldap configuration -# server_uri: ldaps://example.org -# bind_dn: cn=admin,dc=example,dc=org -# bind_password: admin_password -# search_base_dn: cn=Users,dc=example,dc=org - -# # enable TLS encryption over the standard LDAP port, -# # see: https://django-auth-ldap.readthedocs.io/en/latest/reference.html#auth-ldap-start-tls -# # start_tls: false - -# # uncomment if you want to use direct bind, bind_dn and bin_password is not necessary then -# # user_dn_template: "uid=%(user)s,dc=example,dc=org" - -# # uncomment to set advanced global options, see https://www.python-ldap.org/en/latest/reference/ldap.html#ldap-options -# # for all available options (keys and values starting with OPT_ get automatically converted to python-ldap keys) -# # global_options: -# # OPT_X_TLS_REQUIRE_CERT: OPT_X_TLS_NEVER -# # OPT_X_TLS_CACERTFILE: /opt/inventree/ldapca.pem - -# # uncomment for advanced filter search, default: uid=%(user)s -# # search_filter_str: - -# # uncomment for advanced user attribute mapping (in the format : ) -# # user_attr_map: -# # first_name: givenName -# # last_name: sn -# # email: mail - -# # always update the user on each login, default: true -# # always_update_user: true - -# # cache timeout to reduce traffic with LDAP server, default: 3600 (1h) -# # cache_timeout: 3600 - -# # LDAP group support -# # group_search: ou=groups,dc=example,dc=com -# # require_group: cn=inventree_allow,ou=groups,dc=example,dc=com -# # deny_group: cn=inventree_deny,ou=groups,dc=example,dc=com -# # Set staff/superuser flag based on LDAP group membership -# # user_flags_by_group: -# # is_staff: cn=inventree_staff,ou=groups,dc=example,dc=com -# # is_superuser: cn=inventree_superuser,ou=groups,dc=example,dc=com +# Add LDAP support (refer to the documentation for available options) +# Ref: https://docs.inventree.org/en/stable/start/advanced/#ldap +ldap: + enabled: false # Customization options -# Add custom messages to the login page or main interface navbar or exchange the logo -# Use environment variable INVENTREE_CUSTOMIZE or INVENTREE_CUSTOM_LOGO -# Logo and splash paths and filenames must be relative to the static_root directory +# Ref: https://docs.inventree.org/en/stable/start/config/#customization-options # customize: # login_message: InvenTree demo instance - Click here for login details # navbar_message:
InvenTree demo mode
@@ -300,6 +200,7 @@ remote_login_header: HTTP_REMOTE_USER # hide_password_reset: true # logo: img/custom_logo.png # splash: img/custom_splash.jpg +# hide_pui_banner: true # Set enabled frontends # Use the environment variable INVENTREE_CLASSIC_FRONTEND diff --git a/src/backend/InvenTree/generic/templating/__init__.py b/src/backend/InvenTree/generic/templating/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/backend/InvenTree/generic/templating/apps.py b/src/backend/InvenTree/generic/templating/apps.py deleted file mode 100644 index 1fde7e47e9..0000000000 --- a/src/backend/InvenTree/generic/templating/apps.py +++ /dev/null @@ -1,134 +0,0 @@ -"""Shared templating code.""" - -import logging -import warnings -from pathlib import Path - -from django.core.exceptions import AppRegistryNotReady -from django.core.files.storage import default_storage -from django.db.utils import IntegrityError, OperationalError, ProgrammingError - -from maintenance_mode.core import maintenance_mode_on, set_maintenance_mode - -import InvenTree.helpers -from InvenTree.config import ensure_dir - -logger = logging.getLogger('inventree') - - -class TemplatingMixin: - """Mixin that contains shared templating code.""" - - name: str = '' - db: str = '' - - def __init__(self, *args, **kwargs): - """Ensure that the required properties are set.""" - super().__init__(*args, **kwargs) - if self.name == '': - raise NotImplementedError('ref must be set') - if self.db == '': - raise NotImplementedError('db must be set') - - def create_defaults(self): - """Function that creates all default templates for the app.""" - raise NotImplementedError('create_defaults must be implemented') - - def get_src_dir(self, ref_name): - """Get the source directory for the default templates.""" - raise NotImplementedError('get_src_dir must be implemented') - - def get_new_obj_data(self, data, filename): - """Get the data for a new template db object.""" - raise NotImplementedError('get_new_obj_data must be implemented') - - # Standardized code - def ready(self): - """This function is called whenever the app is loaded.""" - import InvenTree.ready - - # skip loading if plugin registry is not loaded or we run in a background thread - if ( - not InvenTree.ready.isPluginRegistryLoaded() - or not InvenTree.ready.isInMainThread() - ): - return - - if not InvenTree.ready.canAppAccessDatabase(allow_test=False): - return # pragma: no cover - - with maintenance_mode_on(): - try: - self.create_defaults() - except ( - AppRegistryNotReady, - IntegrityError, - OperationalError, - ProgrammingError, - ): - # Database might not yet be ready - warnings.warn( - f'Database was not ready for creating {self.name}s', stacklevel=2 - ) - - set_maintenance_mode(False) - - def create_template_dir(self, model, data): - """Create folder and database entries for the default templates, if they do not already exist.""" - ref_name = model.getSubdir() - - # Create root dir for templates - src_dir = self.get_src_dir(ref_name) - ensure_dir(Path(self.name, 'inventree', ref_name), default_storage) - - # Copy each template across (if required) - for entry in data: - self.create_template_file(model, src_dir, entry, ref_name) - - def create_template_file(self, model, src_dir, data, ref_name): - """Ensure a label template is in place.""" - # Destination filename - filename = Path(self.name, 'inventree', ref_name, data['file']) - src_file = src_dir.joinpath(data['file']) - - do_copy = False - - if not default_storage.exists(filename): - logger.info("%s template '%s' is not present", self.name, filename) - do_copy = True - else: - # Check if the file contents are different - src_hash = InvenTree.helpers.hash_file(src_file) - dst_hash = InvenTree.helpers.hash_file(filename, default_storage) - - if src_hash != dst_hash: - logger.info("Hash differs for '%s'", filename) - do_copy = True - - if do_copy: - logger.info("Copying %s template '%s'", self.name, filename) - # Ensure destination dir exists - ensure_dir(filename.parent, default_storage) - - # Copy file - default_storage.save(filename, src_file.open('rb')) - - # Check if a file matching the template already exists - try: - if model.objects.filter(**{self.db: filename}).exists(): - return # pragma: no cover - except Exception: - logger.exception( - "Failed to query %s for '%s' - you should run 'invoke update' first!", - self.name, - filename, - ) - - logger.info("Creating entry for %s '%s'", model, data.get('name')) - - try: - model.objects.create(**self.get_new_obj_data(data, str(filename))) - except Exception as _e: - logger.warning( - "Failed to create %s '%s' with error '%s'", self.name, data['name'], _e - ) diff --git a/src/backend/InvenTree/label/__init__.py b/src/backend/InvenTree/label/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/backend/InvenTree/label/admin.py b/src/backend/InvenTree/label/admin.py deleted file mode 100644 index fd11629134..0000000000 --- a/src/backend/InvenTree/label/admin.py +++ /dev/null @@ -1,17 +0,0 @@ -"""Admin functionality for the 'label' app.""" - -from django.contrib import admin - -import label.models - - -class LabelAdmin(admin.ModelAdmin): - """Admin class for the various label models.""" - - list_display = ('name', 'description', 'label', 'filters', 'enabled') - - -admin.site.register(label.models.StockItemLabel, LabelAdmin) -admin.site.register(label.models.StockLocationLabel, LabelAdmin) -admin.site.register(label.models.PartLabel, LabelAdmin) -admin.site.register(label.models.BuildLineLabel, LabelAdmin) diff --git a/src/backend/InvenTree/label/api.py b/src/backend/InvenTree/label/api.py deleted file mode 100644 index 9cf252b2eb..0000000000 --- a/src/backend/InvenTree/label/api.py +++ /dev/null @@ -1,504 +0,0 @@ -"""API functionality for the 'label' app.""" - -from django.core.exceptions import FieldError, ValidationError -from django.http import JsonResponse -from django.urls import include, path, re_path -from django.utils.decorators import method_decorator -from django.utils.translation import gettext_lazy as _ -from django.views.decorators.cache import cache_page, never_cache - -from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import serializers -from rest_framework.exceptions import NotFound -from rest_framework.request import clone_request - -import build.models -import common.models -import InvenTree.exceptions -import InvenTree.helpers -import label.models -import label.serializers -from InvenTree.api import MetadataView -from InvenTree.filters import InvenTreeSearchFilter -from InvenTree.mixins import ListCreateAPI, RetrieveAPI, RetrieveUpdateDestroyAPI -from part.models import Part -from plugin.builtin.labels.inventree_label import InvenTreeLabelPlugin -from plugin.registry import registry -from stock.models import StockItem, StockLocation - - -class LabelFilterMixin: - """Mixin for filtering a queryset by a list of object ID values. - - Each implementing class defines a database model to lookup, - and a "key" (query parameter) for providing a list of ID (PK) values. - - This mixin defines a 'get_items' method which provides a generic - implementation to return a list of matching database model instances. - """ - - # Database model for instances to actually be "printed" against this label template - ITEM_MODEL = None - - # Default key for looking up database model instances - ITEM_KEY = 'item' - - def get_items(self): - """Return a list of database objects from query parameter.""" - ids = [] - - # Construct a list of possible query parameter value options - # e.g. if self.ITEM_KEY = 'part' -> ['part', 'part[]', 'parts', parts[]'] - for k in [self.ITEM_KEY + x for x in ['', '[]', 's', 's[]']]: - if ids := self.request.query_params.getlist(k, []): - # Return the first list of matches - break - - # Next we must validate each provided object ID - valid_ids = [] - - for id in ids: - try: - valid_ids.append(int(id)) - except ValueError: - pass - - # Filter queryset by matching ID values - return self.ITEM_MODEL.objects.filter(pk__in=valid_ids) - - -class LabelListView(LabelFilterMixin, ListCreateAPI): - """Generic API class for label templates.""" - - def filter_queryset(self, queryset): - """Filter the queryset based on the provided label ID values. - - As each 'label' instance may optionally define its own filters, - the resulting queryset is the 'union' of the two. - """ - queryset = super().filter_queryset(queryset) - - items = self.get_items() - - if len(items) > 0: - """ - At this point, we are basically forced to be inefficient, - as we need to compare the 'filters' string of each label, - and see if it matches against each of the requested items. - - TODO: In the future, if this becomes excessively slow, it - will need to be readdressed. - """ - valid_label_ids = set() - - for lbl in queryset.all(): - matches = True - - try: - filters = InvenTree.helpers.validateFilterString(lbl.filters) - except ValidationError: - continue - - for item in items: - item_query = self.ITEM_MODEL.objects.filter(pk=item.pk) - - try: - if not item_query.filter(**filters).exists(): - matches = False - break - except FieldError: - matches = False - break - - # Matched all items - if matches: - valid_label_ids.add(lbl.pk) - else: - continue - - # Reduce queryset to only valid matches - queryset = queryset.filter(pk__in=list(valid_label_ids)) - - return queryset - - filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] - - filterset_fields = ['enabled'] - - search_fields = ['name', 'description'] - - -@method_decorator(cache_page(5), name='dispatch') -class LabelPrintMixin(LabelFilterMixin): - """Mixin for printing labels.""" - - rolemap = {'GET': 'view', 'POST': 'view'} - - def check_permissions(self, request): - """Override request method to GET so that also non superusers can print using a post request.""" - if request.method == 'POST': - request = clone_request(request, 'GET') - return super().check_permissions(request) - - @method_decorator(never_cache) - def dispatch(self, *args, **kwargs): - """Prevent caching when printing report templates.""" - return super().dispatch(*args, **kwargs) - - def get_serializer(self, *args, **kwargs): - """Define a get_serializer method to be discoverable by the OPTIONS request.""" - # Check the request to determine if the user has selected a label printing plugin - plugin = self.get_plugin(self.request) - - kwargs.setdefault('context', self.get_serializer_context()) - serializer = plugin.get_printing_options_serializer( - self.request, *args, **kwargs - ) - - # if no serializer is defined, return an empty serializer - if not serializer: - return serializers.Serializer() - - return serializer - - def get(self, request, *args, **kwargs): - """Perform a GET request against this endpoint to print labels.""" - common.models.InvenTreeUserSetting.set_setting( - 'DEFAULT_' + self.ITEM_KEY.upper() + '_LABEL_TEMPLATE', - self.get_object().pk, - None, - user=request.user, - ) - return self.print(request, self.get_items()) - - def post(self, request, *args, **kwargs): - """Perform a GET request against this endpoint to print labels.""" - return self.get(request, *args, **kwargs) - - def get_plugin(self, request): - """Return the label printing plugin associated with this request. - - This is provided in the url, e.g. ?plugin=myprinter - - Requires: - - settings.PLUGINS_ENABLED is True - - matching plugin can be found - - matching plugin implements the 'labels' mixin - - matching plugin is enabled - """ - plugin_key = request.query_params.get('plugin', None) - - # No plugin provided! - if plugin_key is None: - # Default to the builtin label printing plugin - plugin_key = InvenTreeLabelPlugin.NAME.lower() - - plugin = registry.get_plugin(plugin_key) - - if not plugin: - raise NotFound(f"Plugin '{plugin_key}' not found") - - if not plugin.is_active(): - raise ValidationError(f"Plugin '{plugin_key}' is not enabled") - - if not plugin.mixin_enabled('labels'): - raise ValidationError( - f"Plugin '{plugin_key}' is not a label printing plugin" - ) - - # Only return the plugin if it is enabled and has the label printing mixin - return plugin - - def print(self, request, items_to_print): - """Print this label template against a number of pre-validated items.""" - # Check the request to determine if the user has selected a label printing plugin - plugin = self.get_plugin(request) - - if len(items_to_print) == 0: - # No valid items provided, return an error message - raise ValidationError('No valid objects provided to label template') - - # Label template - label = self.get_object() - - # Check the label dimensions - if label.width <= 0 or label.height <= 0: - raise ValidationError('Label has invalid dimensions') - - # if the plugin returns a serializer, validate the data - if serializer := plugin.get_printing_options_serializer( - request, data=request.data, context=self.get_serializer_context() - ): - serializer.is_valid(raise_exception=True) - - # At this point, we offload the label(s) to the selected plugin. - # The plugin is responsible for handling the request and returning a response. - - try: - result = plugin.print_labels( - label, - items_to_print, - request, - printing_options=(serializer.data if serializer else {}), - ) - except ValidationError as e: - raise (e) - except Exception as e: - raise ValidationError([_('Error printing label'), str(e)]) - - if isinstance(result, JsonResponse): - result['plugin'] = plugin.plugin_slug() - return result - raise ValidationError( - f"Plugin '{plugin.plugin_slug()}' returned invalid response type '{type(result)}'" - ) - - -class StockItemLabelMixin: - """Mixin for StockItemLabel endpoints.""" - - queryset = label.models.StockItemLabel.objects.all() - serializer_class = label.serializers.StockItemLabelSerializer - - ITEM_MODEL = StockItem - ITEM_KEY = 'item' - - -class StockItemLabelList(StockItemLabelMixin, LabelListView): - """API endpoint for viewing list of StockItemLabel objects. - - Filterable by: - - - enabled: Filter by enabled / disabled status - - item: Filter by single stock item - - items: Filter by list of stock items - """ - - pass - - -class StockItemLabelDetail(StockItemLabelMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single StockItemLabel object.""" - - pass - - -class StockItemLabelPrint(StockItemLabelMixin, LabelPrintMixin, RetrieveAPI): - """API endpoint for printing a StockItemLabel object.""" - - pass - - -class StockLocationLabelMixin: - """Mixin for StockLocationLabel endpoints.""" - - queryset = label.models.StockLocationLabel.objects.all() - serializer_class = label.serializers.StockLocationLabelSerializer - - ITEM_MODEL = StockLocation - ITEM_KEY = 'location' - - -class StockLocationLabelList(StockLocationLabelMixin, LabelListView): - """API endpoint for viewiing list of StockLocationLabel objects. - - Filterable by: - - - enabled: Filter by enabled / disabled status - - location: Filter by a single stock location - - locations: Filter by list of stock locations - """ - - pass - - -class StockLocationLabelDetail(StockLocationLabelMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single StockLocationLabel object.""" - - pass - - -class StockLocationLabelPrint(StockLocationLabelMixin, LabelPrintMixin, RetrieveAPI): - """API endpoint for printing a StockLocationLabel object.""" - - pass - - -class PartLabelMixin: - """Mixin for PartLabel endpoints.""" - - queryset = label.models.PartLabel.objects.all() - serializer_class = label.serializers.PartLabelSerializer - - ITEM_MODEL = Part - ITEM_KEY = 'part' - - -class PartLabelList(PartLabelMixin, LabelListView): - """API endpoint for viewing list of PartLabel objects.""" - - pass - - -class PartLabelDetail(PartLabelMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single PartLabel object.""" - - pass - - -class PartLabelPrint(PartLabelMixin, LabelPrintMixin, RetrieveAPI): - """API endpoint for printing a PartLabel object.""" - - pass - - -class BuildLineLabelMixin: - """Mixin class for BuildLineLabel endpoints.""" - - queryset = label.models.BuildLineLabel.objects.all() - serializer_class = label.serializers.BuildLineLabelSerializer - - ITEM_MODEL = build.models.BuildLine - ITEM_KEY = 'line' - - -class BuildLineLabelList(BuildLineLabelMixin, LabelListView): - """API endpoint for viewing a list of BuildLineLabel objects.""" - - pass - - -class BuildLineLabelDetail(BuildLineLabelMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single BuildLineLabel object.""" - - pass - - -class BuildLineLabelPrint(BuildLineLabelMixin, LabelPrintMixin, RetrieveAPI): - """API endpoint for printing a BuildLineLabel object.""" - - pass - - -label_api_urls = [ - # Stock item labels - path( - 'stock/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - StockItemLabelPrint.as_view(), - name='api-stockitem-label-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': label.models.StockItemLabel}, - name='api-stockitem-label-metadata', - ), - path( - '', - StockItemLabelDetail.as_view(), - name='api-stockitem-label-detail', - ), - ]), - ), - # List view - path('', StockItemLabelList.as_view(), name='api-stockitem-label-list'), - ]), - ), - # Stock location labels - path( - 'location/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - StockLocationLabelPrint.as_view(), - name='api-stocklocation-label-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': label.models.StockLocationLabel}, - name='api-stocklocation-label-metadata', - ), - path( - '', - StockLocationLabelDetail.as_view(), - name='api-stocklocation-label-detail', - ), - ]), - ), - # List view - path( - '', - StockLocationLabelList.as_view(), - name='api-stocklocation-label-list', - ), - ]), - ), - # Part labels - path( - 'part/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - PartLabelPrint.as_view(), - name='api-part-label-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': label.models.PartLabel}, - name='api-part-label-metadata', - ), - path('', PartLabelDetail.as_view(), name='api-part-label-detail'), - ]), - ), - # List view - path('', PartLabelList.as_view(), name='api-part-label-list'), - ]), - ), - # BuildLine labels - path( - 'buildline/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - BuildLineLabelPrint.as_view(), - name='api-buildline-label-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': label.models.BuildLineLabel}, - name='api-buildline-label-metadata', - ), - path( - '', - BuildLineLabelDetail.as_view(), - name='api-buildline-label-detail', - ), - ]), - ), - # List view - path('', BuildLineLabelList.as_view(), name='api-buildline-label-list'), - ]), - ), -] diff --git a/src/backend/InvenTree/label/apps.py b/src/backend/InvenTree/label/apps.py deleted file mode 100644 index 583d2a2591..0000000000 --- a/src/backend/InvenTree/label/apps.py +++ /dev/null @@ -1,107 +0,0 @@ -"""Config options for the label app.""" - -from pathlib import Path - -from django.apps import AppConfig - -from generic.templating.apps import TemplatingMixin - - -class LabelConfig(TemplatingMixin, AppConfig): - """Configuration class for the "label" app.""" - - name = 'label' - db = 'label' - - def create_defaults(self): - """Create all default templates.""" - # Test if models are ready - try: - import label.models - except Exception: # pragma: no cover - # Database is not ready yet - return - assert bool(label.models.StockLocationLabel is not None) - - # Create the categories - self.create_template_dir( - label.models.StockItemLabel, - [ - { - 'file': 'qr.html', - 'name': 'QR Code', - 'description': 'Simple QR code label', - 'width': 24, - 'height': 24, - } - ], - ) - - self.create_template_dir( - label.models.StockLocationLabel, - [ - { - 'file': 'qr.html', - 'name': 'QR Code', - 'description': 'Simple QR code label', - 'width': 24, - 'height': 24, - }, - { - 'file': 'qr_and_text.html', - 'name': 'QR and text', - 'description': 'Label with QR code and name of location', - 'width': 50, - 'height': 24, - }, - ], - ) - - self.create_template_dir( - label.models.PartLabel, - [ - { - 'file': 'part_label.html', - 'name': 'Part Label', - 'description': 'Simple part label', - 'width': 70, - 'height': 24, - }, - { - 'file': 'part_label_code128.html', - 'name': 'Barcode Part Label', - 'description': 'Simple part label with Code128 barcode', - 'width': 70, - 'height': 24, - }, - ], - ) - - self.create_template_dir( - label.models.BuildLineLabel, - [ - { - 'file': 'buildline_label.html', - 'name': 'Build Line Label', - 'description': 'Example build line label', - 'width': 125, - 'height': 48, - } - ], - ) - - def get_src_dir(self, ref_name): - """Get the source directory.""" - return Path(__file__).parent.joinpath('templates', self.name, ref_name) - - def get_new_obj_data(self, data, filename): - """Get the data for a new template db object.""" - return { - 'name': data['name'], - 'description': data['description'], - 'label': filename, - 'filters': '', - 'enabled': True, - 'width': data['width'], - 'height': data['height'], - } diff --git a/src/backend/InvenTree/label/migrations/0001_initial.py b/src/backend/InvenTree/label/migrations/0001_initial.py deleted file mode 100644 index e960bcef67..0000000000 --- a/src/backend/InvenTree/label/migrations/0001_initial.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.0.7 on 2020-08-15 23:27 - -import InvenTree.helpers -import django.core.validators -from django.db import migrations, models -import label.models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='StockItemLabel', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(help_text='Label name', max_length=100, unique=True)), - ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True)), - ('label', models.FileField(help_text='Label template file', upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])])), - ('filters', models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString])), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0002_stockitemlabel_enabled.py b/src/backend/InvenTree/label/migrations/0002_stockitemlabel_enabled.py deleted file mode 100644 index 684299e184..0000000000 --- a/src/backend/InvenTree/label/migrations/0002_stockitemlabel_enabled.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.0.7 on 2020-08-22 23:04 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='stockitemlabel', - name='enabled', - field=models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0003_stocklocationlabel.py b/src/backend/InvenTree/label/migrations/0003_stocklocationlabel.py deleted file mode 100644 index d15fcfa396..0000000000 --- a/src/backend/InvenTree/label/migrations/0003_stocklocationlabel.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 3.0.7 on 2021-01-08 12:06 - -import InvenTree.helpers -import django.core.validators -from django.db import migrations, models -import label.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0002_stockitemlabel_enabled'), - ] - - operations = [ - migrations.CreateModel( - name='StockLocationLabel', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(help_text='Label name', max_length=100, unique=True)), - ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True)), - ('label', models.FileField(help_text='Label template file', upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])])), - ('filters', models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString])), - ('enabled', models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0004_auto_20210111_2302.py b/src/backend/InvenTree/label/migrations/0004_auto_20210111_2302.py deleted file mode 100644 index 5194a4bda1..0000000000 --- a/src/backend/InvenTree/label/migrations/0004_auto_20210111_2302.py +++ /dev/null @@ -1,56 +0,0 @@ -# Generated by Django 3.0.7 on 2021-01-11 12:02 - -import InvenTree.helpers -import django.core.validators -from django.db import migrations, models -import label.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0003_stocklocationlabel'), - ] - - operations = [ - migrations.AlterField( - model_name='stockitemlabel', - name='description', - field=models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description'), - ), - migrations.AlterField( - model_name='stockitemlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString], verbose_name='Filters'), - ), - migrations.AlterField( - model_name='stockitemlabel', - name='label', - field=models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label'), - ), - migrations.AlterField( - model_name='stockitemlabel', - name='name', - field=models.CharField(help_text='Label name', max_length=100, verbose_name='Name'), - ), - migrations.AlterField( - model_name='stocklocationlabel', - name='description', - field=models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description'), - ), - migrations.AlterField( - model_name='stocklocationlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[InvenTree.helpers.validateFilterString], verbose_name='Filters'), - ), - migrations.AlterField( - model_name='stocklocationlabel', - name='label', - field=models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label'), - ), - migrations.AlterField( - model_name='stocklocationlabel', - name='name', - field=models.CharField(help_text='Label name', max_length=100, verbose_name='Name'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0005_auto_20210113_2302.py b/src/backend/InvenTree/label/migrations/0005_auto_20210113_2302.py deleted file mode 100644 index ad256412ac..0000000000 --- a/src/backend/InvenTree/label/migrations/0005_auto_20210113_2302.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.0.7 on 2021-01-13 12:02 - -from django.db import migrations, models -import label.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0004_auto_20210111_2302'), - ] - - operations = [ - migrations.AlterField( - model_name='stockitemlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[label.models.validate_stock_item_filters], verbose_name='Filters'), - ), - migrations.AlterField( - model_name='stocklocationlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs', max_length=250, validators=[label.models.validate_stock_location_filters], verbose_name='Filters'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0006_auto_20210222_1535.py b/src/backend/InvenTree/label/migrations/0006_auto_20210222_1535.py deleted file mode 100644 index ea3441b64f..0000000000 --- a/src/backend/InvenTree/label/migrations/0006_auto_20210222_1535.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 3.0.7 on 2021-02-22 04:35 - -import django.core.validators -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0005_auto_20210113_2302'), - ] - - operations = [ - migrations.AddField( - model_name='stockitemlabel', - name='height', - field=models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]'), - ), - migrations.AddField( - model_name='stockitemlabel', - name='width', - field=models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]'), - ), - migrations.AddField( - model_name='stocklocationlabel', - name='height', - field=models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]'), - ), - migrations.AddField( - model_name='stocklocationlabel', - name='width', - field=models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0007_auto_20210513_1327.py b/src/backend/InvenTree/label/migrations/0007_auto_20210513_1327.py deleted file mode 100644 index d49c83c92b..0000000000 --- a/src/backend/InvenTree/label/migrations/0007_auto_20210513_1327.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2 on 2021-05-13 03:27 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0006_auto_20210222_1535'), - ] - - operations = [ - migrations.AddField( - model_name='stockitemlabel', - name='filename_pattern', - field=models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern'), - ), - migrations.AddField( - model_name='stocklocationlabel', - name='filename_pattern', - field=models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0008_auto_20210708_2106.py b/src/backend/InvenTree/label/migrations/0008_auto_20210708_2106.py deleted file mode 100644 index ea57526909..0000000000 --- a/src/backend/InvenTree/label/migrations/0008_auto_20210708_2106.py +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Django 3.2.4 on 2021-07-08 11:06 - -import django.core.validators -from django.db import migrations, models -import label.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0007_auto_20210513_1327'), - ] - - operations = [ - migrations.CreateModel( - name='PartLabel', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(help_text='Label name', max_length=100, verbose_name='Name')), - ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description')), - ('label', models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label')), - ('enabled', models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled')), - ('width', models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]')), - ('height', models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]')), - ('filename_pattern', models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern')), - ('filters', models.CharField(blank=True, help_text='Part query filters (comma-separated value of key=value pairs)', max_length=250, validators=[label.models.validate_part_filters], verbose_name='Filters')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AlterField( - model_name='stockitemlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs),', max_length=250, validators=[label.models.validate_stock_item_filters], verbose_name='Filters'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0009_auto_20230317_0816.py b/src/backend/InvenTree/label/migrations/0009_auto_20230317_0816.py deleted file mode 100644 index 16b81a5f7f..0000000000 --- a/src/backend/InvenTree/label/migrations/0009_auto_20230317_0816.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.18 on 2023-03-17 08:16 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0008_auto_20210708_2106'), - ] - - operations = [ - migrations.AddField( - model_name='partlabel', - name='metadata', - field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), - ), - migrations.AddField( - model_name='stockitemlabel', - name='metadata', - field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), - ), - migrations.AddField( - model_name='stocklocationlabel', - name='metadata', - field=models.JSONField(blank=True, help_text='JSON metadata field, for use by external plugins', null=True, verbose_name='Plugin Metadata'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0010_buildlinelabel.py b/src/backend/InvenTree/label/migrations/0010_buildlinelabel.py deleted file mode 100644 index 329c274367..0000000000 --- a/src/backend/InvenTree/label/migrations/0010_buildlinelabel.py +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-13 11:10 - -import django.core.validators -from django.db import migrations, models -import label.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0009_auto_20230317_0816'), - ] - - operations = [ - migrations.CreateModel( - name='BuildLineLabel', - 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')), - ('name', models.CharField(help_text='Label name', max_length=100, verbose_name='Name')), - ('description', models.CharField(blank=True, help_text='Label description', max_length=250, null=True, verbose_name='Description')), - ('label', models.FileField(help_text='Label template file', unique=True, upload_to=label.models.rename_label, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html'])], verbose_name='Label')), - ('enabled', models.BooleanField(default=True, help_text='Label template is enabled', verbose_name='Enabled')), - ('width', models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]')), - ('height', models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]')), - ('filename_pattern', models.CharField(default='label.pdf', help_text='Pattern for generating label filenames', max_length=100, verbose_name='Filename Pattern')), - ('filters', models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_build_line_filters], verbose_name='Filters')), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0011_auto_20230623_2158.py b/src/backend/InvenTree/label/migrations/0011_auto_20230623_2158.py deleted file mode 100644 index 764925fc07..0000000000 --- a/src/backend/InvenTree/label/migrations/0011_auto_20230623_2158.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 3.2.19 on 2023-06-23 21:58 - -from django.db import migrations, models -import label.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('label', '0010_buildlinelabel'), - ] - - operations = [ - migrations.AlterField( - model_name='partlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_part_filters], verbose_name='Filters'), - ), - migrations.AlterField( - model_name='stockitemlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_stock_item_filters], verbose_name='Filters'), - ), - migrations.AlterField( - model_name='stocklocationlabel', - name='filters', - field=models.CharField(blank=True, help_text='Query filters (comma-separated list of key=value pairs)', max_length=250, validators=[label.models.validate_stock_location_filters], verbose_name='Filters'), - ), - ] diff --git a/src/backend/InvenTree/label/migrations/0012_labeloutput.py b/src/backend/InvenTree/label/migrations/0012_labeloutput.py deleted file mode 100644 index 3a69fb9a9b..0000000000 --- a/src/backend/InvenTree/label/migrations/0012_labeloutput.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.2.20 on 2023-07-14 11:55 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import label.models - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('label', '0011_auto_20230623_2158'), - ] - - operations = [ - migrations.CreateModel( - name='LabelOutput', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('label', models.FileField(unique=True, upload_to=label.models.rename_label_output)), - ('created', models.DateField(auto_now_add=True)), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/src/backend/InvenTree/label/migrations/__init__.py b/src/backend/InvenTree/label/migrations/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/backend/InvenTree/label/models.py b/src/backend/InvenTree/label/models.py deleted file mode 100644 index 17cc252afb..0000000000 --- a/src/backend/InvenTree/label/models.py +++ /dev/null @@ -1,429 +0,0 @@ -"""Label printing models.""" - -import logging -import os -import sys - -from django.conf import settings -from django.contrib.auth.models import User -from django.core.validators import FileExtensionValidator, MinValueValidator -from django.db import models -from django.template import Context, Template -from django.template.loader import render_to_string -from django.urls import reverse -from django.utils.translation import gettext_lazy as _ - -import build.models -import InvenTree.helpers -import InvenTree.models -import part.models -import stock.models -from InvenTree.helpers import normalize, validateFilterString -from InvenTree.helpers_model import get_base_url -from plugin.registry import registry - -try: - from django_weasyprint import WeasyTemplateResponseMixin -except OSError as err: # pragma: no cover - print(f'OSError: {err}') - print('You may require some further system packages to be installed.') - sys.exit(1) - - -logger = logging.getLogger('inventree') - - -def rename_label(instance, filename): - """Place the label file into the correct subdirectory.""" - filename = os.path.basename(filename) - - return os.path.join('label', 'template', instance.SUBDIR, filename) - - -def rename_label_output(instance, filename): - """Place the label output file into the correct subdirectory.""" - filename = os.path.basename(filename) - - return os.path.join('label', 'output', filename) - - -def validate_stock_item_filters(filters): - """Validate query filters for the StockItemLabel model.""" - filters = validateFilterString(filters, model=stock.models.StockItem) - - return filters - - -def validate_stock_location_filters(filters): - """Validate query filters for the StockLocationLabel model.""" - filters = validateFilterString(filters, model=stock.models.StockLocation) - - return filters - - -def validate_part_filters(filters): - """Validate query filters for the PartLabel model.""" - filters = validateFilterString(filters, model=part.models.Part) - - return filters - - -def validate_build_line_filters(filters): - """Validate query filters for the BuildLine model.""" - filters = validateFilterString(filters, model=build.models.BuildLine) - - return filters - - -class WeasyprintLabelMixin(WeasyTemplateResponseMixin): - """Class for rendering a label to a PDF.""" - - pdf_filename = 'label.pdf' - pdf_attachment = True - - def __init__(self, request, template, **kwargs): - """Initialize a label mixin with certain properties.""" - self.request = request - self.template_name = template - self.pdf_filename = kwargs.get('filename', 'label.pdf') - - -class LabelTemplate(InvenTree.models.InvenTreeMetadataModel): - """Base class for generic, filterable labels.""" - - class Meta: - """Metaclass options. Abstract ensures no database table is created.""" - - abstract = True - - @classmethod - def getSubdir(cls) -> str: - """Return the subdirectory for this label.""" - return cls.SUBDIR - - # Each class of label files will be stored in a separate subdirectory - SUBDIR: str = 'label' - - # Object we will be printing against (will be filled out later) - object_to_print = None - - @property - def template(self): - """Return the file path of the template associated with this label instance.""" - return self.label.path - - def __str__(self): - """Format a string representation of a label instance.""" - return f'{self.name} - {self.description}' - - name = models.CharField( - blank=False, max_length=100, verbose_name=_('Name'), help_text=_('Label name') - ) - - description = models.CharField( - max_length=250, - blank=True, - null=True, - verbose_name=_('Description'), - help_text=_('Label description'), - ) - - label = models.FileField( - upload_to=rename_label, - unique=True, - blank=False, - null=False, - verbose_name=_('Label'), - help_text=_('Label template file'), - validators=[FileExtensionValidator(allowed_extensions=['html'])], - ) - - enabled = models.BooleanField( - default=True, - verbose_name=_('Enabled'), - help_text=_('Label template is enabled'), - ) - - width = models.FloatField( - default=50, - verbose_name=_('Width [mm]'), - help_text=_('Label width, specified in mm'), - validators=[MinValueValidator(2)], - ) - - height = models.FloatField( - default=20, - verbose_name=_('Height [mm]'), - help_text=_('Label height, specified in mm'), - validators=[MinValueValidator(2)], - ) - - filename_pattern = models.CharField( - default='label.pdf', - verbose_name=_('Filename Pattern'), - help_text=_('Pattern for generating label filenames'), - max_length=100, - ) - - @property - def template_name(self): - """Returns the file system path to the template file. - - Required for passing the file to an external process - """ - template = self.label.name - template = template.replace('/', os.path.sep) - template = template.replace('\\', os.path.sep) - - template = settings.MEDIA_ROOT.joinpath(template) - - return template - - def get_context_data(self, request): - """Supply custom context data to the template for rendering. - - Note: Override this in any subclass - """ - return {} # pragma: no cover - - def generate_filename(self, request, **kwargs): - """Generate a filename for this label.""" - template_string = Template(self.filename_pattern) - - ctx = self.context(request) - - context = Context(ctx) - - return template_string.render(context) - - def generate_page_style(self, **kwargs): - """Generate @page style for the label template. - - This is inserted at the top of the style block for a given label - """ - width = kwargs.get('width', self.width) - height = kwargs.get('height', self.height) - margin = kwargs.get('margin', 0) - - return f""" - @page {{ - size: {width}mm {height}mm; - margin: {margin}mm; - }} - """ - - def context(self, request, **kwargs): - """Provides context data to the template. - - Arguments: - request: The HTTP request object - kwargs: Additional keyword arguments - """ - context = self.get_context_data(request) - - # By default, each label is supplied with '@page' data - # However, it can be excluded, e.g. when rendering a label sheet - if kwargs.get('insert_page_style', True): - context['page_style'] = self.generate_page_style() - - # Add "basic" context data which gets passed to every label - context['base_url'] = get_base_url(request=request) - context['date'] = InvenTree.helpers.current_date() - context['datetime'] = InvenTree.helpers.current_time() - context['request'] = request - context['user'] = request.user - context['width'] = self.width - context['height'] = self.height - - # Pass the context through to any registered plugins - plugins = registry.with_mixin('report') - - for plugin in plugins: - # Let each plugin add its own context data - plugin.add_label_context(self, self.object_to_print, request, context) - - return context - - def render_as_string(self, request, target_object=None, **kwargs): - """Render the label to a HTML string.""" - if target_object: - self.object_to_print = target_object - - context = self.context(request, **kwargs) - - return render_to_string(self.template_name, context, request) - - def render(self, request, target_object=None, **kwargs): - """Render the label template to a PDF file. - - Uses django-weasyprint plugin to render HTML template - """ - if target_object: - self.object_to_print = target_object - - context = self.context(request, **kwargs) - - wp = WeasyprintLabelMixin( - request, - self.template_name, - base_url=request.build_absolute_uri('/'), - presentational_hints=True, - filename=self.generate_filename(request), - **kwargs, - ) - - return wp.render_to_response(context, **kwargs) - - -class LabelOutput(models.Model): - """Class representing a label output file. - - 'Printing' a label may generate a file object (such as PDF) - which is made available for download. - - Future work will offload this task to the background worker, - and provide a 'progress' bar for the user. - """ - - # File will be stored in a subdirectory - label = models.FileField( - upload_to=rename_label_output, unique=True, blank=False, null=False - ) - - # Creation date of label output - created = models.DateField(auto_now_add=True, editable=False) - - # User who generated the label - user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True) - - -class StockItemLabel(LabelTemplate): - """Template for printing StockItem labels.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the StockItemLabel model.""" - return reverse('api-stockitem-label-list') # pragma: no cover - - SUBDIR = 'stockitem' - - filters = models.CharField( - blank=True, - max_length=250, - help_text=_('Query filters (comma-separated list of key=value pairs)'), - verbose_name=_('Filters'), - validators=[validate_stock_item_filters], - ) - - def get_context_data(self, request): - """Generate context data for each provided StockItem.""" - stock_item = self.object_to_print - - return { - 'item': stock_item, - 'part': stock_item.part, - 'name': stock_item.part.full_name, - 'ipn': stock_item.part.IPN, - 'revision': stock_item.part.revision, - 'quantity': normalize(stock_item.quantity), - 'serial': stock_item.serial, - 'barcode_data': stock_item.barcode_data, - 'barcode_hash': stock_item.barcode_hash, - 'qr_data': stock_item.format_barcode(brief=True), - 'qr_url': request.build_absolute_uri(stock_item.get_absolute_url()), - 'tests': stock_item.testResultMap(), - 'parameters': stock_item.part.parameters_map(), - } - - -class StockLocationLabel(LabelTemplate): - """Template for printing StockLocation labels.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the StockLocationLabel model.""" - return reverse('api-stocklocation-label-list') # pragma: no cover - - SUBDIR = 'stocklocation' - - filters = models.CharField( - blank=True, - max_length=250, - help_text=_('Query filters (comma-separated list of key=value pairs)'), - verbose_name=_('Filters'), - validators=[validate_stock_location_filters], - ) - - def get_context_data(self, request): - """Generate context data for each provided StockLocation.""" - location = self.object_to_print - - return {'location': location, 'qr_data': location.format_barcode(brief=True)} - - -class PartLabel(LabelTemplate): - """Template for printing Part labels.""" - - @staticmethod - def get_api_url(): - """Return the API url associated with the PartLabel model.""" - return reverse('api-part-label-list') # pragma: no cover - - SUBDIR = 'part' - - filters = models.CharField( - blank=True, - max_length=250, - help_text=_('Query filters (comma-separated list of key=value pairs)'), - verbose_name=_('Filters'), - validators=[validate_part_filters], - ) - - def get_context_data(self, request): - """Generate context data for each provided Part object.""" - part = self.object_to_print - - return { - 'part': part, - 'category': part.category, - 'name': part.name, - 'description': part.description, - 'IPN': part.IPN, - 'revision': part.revision, - 'qr_data': part.format_barcode(brief=True), - 'qr_url': request.build_absolute_uri(part.get_absolute_url()), - 'parameters': part.parameters_map(), - } - - -class BuildLineLabel(LabelTemplate): - """Template for printing labels against BuildLine objects.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the BuildLineLabel model.""" - return reverse('api-buildline-label-list') - - SUBDIR = 'buildline' - - filters = models.CharField( - blank=True, - max_length=250, - help_text=_('Query filters (comma-separated list of key=value pairs)'), - verbose_name=_('Filters'), - validators=[validate_build_line_filters], - ) - - def get_context_data(self, request): - """Generate context data for each provided BuildLine object.""" - build_line = self.object_to_print - - return { - 'build_line': build_line, - 'build': build_line.build, - 'bom_item': build_line.bom_item, - 'part': build_line.bom_item.sub_part, - 'quantity': build_line.quantity, - 'allocated_quantity': build_line.allocated_quantity, - 'allocations': build_line.allocations, - } diff --git a/src/backend/InvenTree/label/serializers.py b/src/backend/InvenTree/label/serializers.py deleted file mode 100644 index ef1f467937..0000000000 --- a/src/backend/InvenTree/label/serializers.py +++ /dev/null @@ -1,67 +0,0 @@ -"""API serializers for the label app.""" - -import label.models -from InvenTree.serializers import ( - InvenTreeAttachmentSerializerField, - InvenTreeModelSerializer, -) - - -class LabelSerializerBase(InvenTreeModelSerializer): - """Base class for label serializer.""" - - label = InvenTreeAttachmentSerializerField(required=True) - - @staticmethod - def label_fields(): - """Generic serializer fields for a label template.""" - return [ - 'pk', - 'name', - 'description', - 'label', - 'filters', - 'width', - 'height', - 'enabled', - ] - - -class StockItemLabelSerializer(LabelSerializerBase): - """Serializes a StockItemLabel object.""" - - class Meta: - """Metaclass options.""" - - model = label.models.StockItemLabel - fields = LabelSerializerBase.label_fields() - - -class StockLocationLabelSerializer(LabelSerializerBase): - """Serializes a StockLocationLabel object.""" - - class Meta: - """Metaclass options.""" - - model = label.models.StockLocationLabel - fields = LabelSerializerBase.label_fields() - - -class PartLabelSerializer(LabelSerializerBase): - """Serializes a PartLabel object.""" - - class Meta: - """Metaclass options.""" - - model = label.models.PartLabel - fields = LabelSerializerBase.label_fields() - - -class BuildLineLabelSerializer(LabelSerializerBase): - """Serializes a BuildLineLabel object.""" - - class Meta: - """Metaclass options.""" - - model = label.models.BuildLineLabel - fields = LabelSerializerBase.label_fields() diff --git a/src/backend/InvenTree/label/tasks.py b/src/backend/InvenTree/label/tasks.py deleted file mode 100644 index b1630f6296..0000000000 --- a/src/backend/InvenTree/label/tasks.py +++ /dev/null @@ -1,15 +0,0 @@ -"""Background tasks for the label app.""" - -from datetime import timedelta - -from django.utils import timezone - -from InvenTree.tasks import ScheduledTask, scheduled_task -from label.models import LabelOutput - - -@scheduled_task(ScheduledTask.DAILY) -def cleanup_old_label_outputs(): - """Remove old label outputs from the database.""" - # Remove any label outputs which are older than 30 days - LabelOutput.objects.filter(created__lte=timezone.now() - timedelta(days=5)).delete() diff --git a/src/backend/InvenTree/label/templates/label/buildline/buildline_label.html b/src/backend/InvenTree/label/templates/label/buildline/buildline_label.html deleted file mode 100644 index efbb9a3db6..0000000000 --- a/src/backend/InvenTree/label/templates/label/buildline/buildline_label.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "label/buildline/buildline_label_base.html" %} - - diff --git a/src/backend/InvenTree/label/test_api.py b/src/backend/InvenTree/label/test_api.py deleted file mode 100644 index f2e4d728ec..0000000000 --- a/src/backend/InvenTree/label/test_api.py +++ /dev/null @@ -1,301 +0,0 @@ -"""Unit tests for label API.""" - -import json -from io import StringIO - -from django.core.cache import cache -from django.urls import reverse - -import label.models as label_models -from build.models import BuildLine -from InvenTree.unit_test import InvenTreeAPITestCase -from part.models import Part -from stock.models import StockItem, StockLocation - - -class LabelTest(InvenTreeAPITestCase): - """Base class for unit testing label model API endpoints.""" - - fixtures = ['category', 'part', 'location', 'stock', 'bom', 'build'] - - superuser = True - - model = None - list_url = None - detail_url = None - metadata_url = None - - print_url = None - print_itemname = None - print_itemmodel = None - - def setUp(self): - """Ensure cache is cleared as part of test setup.""" - cache.clear() - return super().setUp() - - def test_api_url(self): - """Test returned API Url against URL tag defined in this file.""" - if not self.list_url: - return - - self.assertEqual(reverse(self.list_url), self.model.get_api_url()) - - def test_list_endpoint(self): - """Test that the LIST endpoint works for each model.""" - if not self.list_url: - return - - url = reverse(self.list_url) - - response = self.get(url) - self.assertEqual(response.status_code, 200) - - labels = self.model.objects.all() - n = len(labels) - - # API endpoint must return correct number of reports - self.assertEqual(len(response.data), n) - - # Filter by "enabled" status - response = self.get(url, {'enabled': True}) - self.assertEqual(len(response.data), n) - - response = self.get(url, {'enabled': False}) - self.assertEqual(len(response.data), 0) - - # Filter by "enabled" status - response = self.get(url, {'enabled': True}) - self.assertEqual(len(response.data), 0) - - response = self.get(url, {'enabled': False}) - self.assertEqual(len(response.data), n) - - def test_create_endpoint(self): - """Test that creating a new report works for each label.""" - if not self.list_url: - return - - url = reverse(self.list_url) - - # Create a new label - # Django REST API "APITestCase" does not work like requests - to send a file without it existing on disk, - # create it as a StringIO object, and upload it under parameter template - filestr = StringIO( - '{% extends "label/label_base.html" %}{% block content %}
TEST LABEL
{% endblock content %}' - ) - filestr.name = 'ExampleTemplate.html' - - response = self.post( - url, - data={ - 'name': 'New label', - 'description': 'A fancy new label created through API test', - 'label': filestr, - }, - format=None, - expected_code=201, - ) - - # Make sure the expected keys are in the response - self.assertIn('pk', response.data) - self.assertIn('name', response.data) - self.assertIn('description', response.data) - self.assertIn('label', response.data) - self.assertIn('filters', response.data) - self.assertIn('enabled', response.data) - - self.assertEqual(response.data['name'], 'New label') - self.assertEqual( - response.data['description'], 'A fancy new label created through API test' - ) - self.assertEqual(response.data['label'].count('ExampleTemplate'), 1) - - def test_detail_endpoint(self): - """Test that the DETAIL endpoint works for each label.""" - if not self.detail_url: - return - - # Create an item first - self.test_create_endpoint() - - labels = self.model.objects.all() - - n = len(labels) - - # Make sure at least one report defined - self.assertGreaterEqual(n, 1) - - # Check detail page for first report - response = self.get( - reverse(self.detail_url, kwargs={'pk': labels[0].pk}), expected_code=200 - ) - - # Make sure the expected keys are in the response - self.assertIn('pk', response.data) - self.assertIn('name', response.data) - self.assertIn('description', response.data) - self.assertIn('label', response.data) - self.assertIn('filters', response.data) - self.assertIn('enabled', response.data) - - filestr = StringIO( - '{% extends "label/label_base.html" %}{% block content %}
TEST LABEL
{% endblock content %}' - ) - filestr.name = 'ExampleTemplate_Updated.html' - - # Check PATCH method - response = self.patch( - reverse(self.detail_url, kwargs={'pk': labels[0].pk}), - { - 'name': 'Changed name during test', - 'description': 'New version of the template', - 'label': filestr, - }, - format=None, - expected_code=200, - ) - - # Make sure the expected keys are in the response - self.assertIn('pk', response.data) - self.assertIn('name', response.data) - self.assertIn('description', response.data) - self.assertIn('label', response.data) - self.assertIn('filters', response.data) - self.assertIn('enabled', response.data) - - self.assertEqual(response.data['name'], 'Changed name during test') - self.assertEqual(response.data['description'], 'New version of the template') - - self.assertEqual(response.data['label'].count('ExampleTemplate_Updated'), 1) - - def test_delete(self): - """Test deleting, after other test are done.""" - if not self.detail_url: - return - - # Create an item first - self.test_create_endpoint() - - labels = self.model.objects.all() - n = len(labels) - # Make sure at least one label defined - self.assertGreaterEqual(n, 1) - - # Delete the last report - self.delete( - reverse(self.detail_url, kwargs={'pk': labels[n - 1].pk}), expected_code=204 - ) - - def test_print_label(self): - """Test printing a label.""" - if not self.print_url: - return - - # Create an item first - self.test_create_endpoint() - - labels = self.model.objects.all() - n = len(labels) - # Make sure at least one label defined - self.assertGreaterEqual(n, 1) - - url = reverse(self.print_url, kwargs={'pk': labels[0].pk}) - - # Try to print without providing a valid item - self.get(url, expected_code=400) - - # Try to print with an invalid item - self.get(url, {self.print_itemname: 9999}, expected_code=400) - - # Now print with a valid item - print(f'{self.print_itemmodel = }') - print(f'{self.print_itemmodel.objects.all() = }') - - item = self.print_itemmodel.objects.first() - self.assertIsNotNone(item) - - response = self.get(url, {self.print_itemname: item.pk}, expected_code=200) - - response_json = json.loads(response.content.decode('utf-8')) - - self.assertIn('file', response_json) - self.assertIn('success', response_json) - self.assertIn('message', response_json) - self.assertTrue(response_json['success']) - - def test_metadata_endpoint(self): - """Unit tests for the metadata field.""" - if not self.metadata_url: - return - - # Create an item first - self.test_create_endpoint() - - labels = self.model.objects.all() - n = len(labels) - # Make sure at least one label defined - self.assertGreaterEqual(n, 1) - - # Test getting metadata - response = self.get( - reverse(self.metadata_url, kwargs={'pk': labels[0].pk}), expected_code=200 - ) - - self.assertEqual(response.data, {'metadata': {}}) - - -class TestStockItemLabel(LabelTest): - """Unit testing class for the StockItemLabel model.""" - - model = label_models.StockItemLabel - - list_url = 'api-stockitem-label-list' - detail_url = 'api-stockitem-label-detail' - metadata_url = 'api-stockitem-label-metadata' - - print_url = 'api-stockitem-label-print' - print_itemname = 'item' - print_itemmodel = StockItem - - -class TestStockLocationLabel(LabelTest): - """Unit testing class for the StockLocationLabel model.""" - - model = label_models.StockLocationLabel - - list_url = 'api-stocklocation-label-list' - detail_url = 'api-stocklocation-label-detail' - metadata_url = 'api-stocklocation-label-metadata' - - print_url = 'api-stocklocation-label-print' - print_itemname = 'location' - print_itemmodel = StockLocation - - -class TestPartLabel(LabelTest): - """Unit testing class for the PartLabel model.""" - - model = label_models.PartLabel - - list_url = 'api-part-label-list' - detail_url = 'api-part-label-detail' - metadata_url = 'api-part-label-metadata' - - print_url = 'api-part-label-print' - print_itemname = 'part' - print_itemmodel = Part - - -class TestBuildLineLabel(LabelTest): - """Unit testing class for the BuildLine model.""" - - model = label_models.BuildLineLabel - - list_url = 'api-buildline-label-list' - detail_url = 'api-buildline-label-detail' - metadata_url = 'api-buildline-label-metadata' - - print_url = 'api-buildline-label-print' - print_itemname = 'line' - print_itemmodel = BuildLine diff --git a/src/backend/InvenTree/label/tests.py b/src/backend/InvenTree/label/tests.py deleted file mode 100644 index b4afce2216..0000000000 --- a/src/backend/InvenTree/label/tests.py +++ /dev/null @@ -1,166 +0,0 @@ -"""Tests for labels.""" - -import io -import json - -from django.apps import apps -from django.conf import settings -from django.core.exceptions import ValidationError -from django.core.files.base import ContentFile -from django.http import JsonResponse -from django.urls import reverse - -from common.models import InvenTreeSetting -from InvenTree.helpers import validateFilterString -from InvenTree.unit_test import InvenTreeAPITestCase -from label.models import LabelOutput -from part.models import Part -from plugin.registry import registry -from stock.models import StockItem - -from .models import PartLabel, StockItemLabel, StockLocationLabel - - -class LabelTest(InvenTreeAPITestCase): - """Unit test class for label models.""" - - fixtures = ['category', 'part', 'location', 'stock'] - - @classmethod - def setUpTestData(cls): - """Ensure that some label instances exist as part of init routine.""" - super().setUpTestData() - apps.get_app_config('label').create_defaults() - - def test_default_labels(self): - """Test that the default label templates are copied across.""" - labels = StockItemLabel.objects.all() - - self.assertTrue(labels.count() > 0) - - labels = StockLocationLabel.objects.all() - - self.assertTrue(labels.count() > 0) - - def test_default_files(self): - """Test that label files exist in the MEDIA directory.""" - - def test_subdir(ref_name): - item_dir = settings.MEDIA_ROOT.joinpath('label', 'inventree', ref_name) - self.assertTrue(len([item_dir.iterdir()]) > 0) - - test_subdir('stockitem') - test_subdir('stocklocation') - test_subdir('part') - - def test_filters(self): - """Test the label filters.""" - filter_string = 'part__pk=10' - - filters = validateFilterString(filter_string, model=StockItem) - - self.assertEqual(type(filters), dict) - - bad_filter_string = 'part_pk=10' - - with self.assertRaises(ValidationError): - validateFilterString(bad_filter_string, model=StockItem) - - def test_label_rendering(self): - """Test label rendering.""" - labels = PartLabel.objects.all() - part = Part.objects.first() - - for label in labels: - url = reverse('api-part-label-print', kwargs={'pk': label.pk}) - - # Check that label printing returns the correct response type - response = self.get(f'{url}?parts={part.pk}', expected_code=200) - self.assertIsInstance(response, JsonResponse) - data = json.loads(response.content) - - self.assertIn('message', data) - self.assertIn('file', data) - label_file = data['file'] - self.assertIn('/media/label/output/', label_file) - - def test_print_part_label(self): - """Actually 'print' a label, and ensure that the correct information is contained.""" - label_data = """ - {% load barcode %} - {% load report %} - - - - part: {{ part.pk }} - {{ part.name }} - - data: {{ qr_data|safe }} - - url: {{ qr_url|safe }} - - image: {% part_image part width=128 %} - - logo: {% logo_image %} - - """ - - buffer = io.StringIO() - buffer.write(label_data) - - template = ContentFile(buffer.getvalue(), 'label.html') - - # Construct a label template - label = PartLabel.objects.create( - name='test', description='Test label', enabled=True, label=template - ) - - # Ensure we are in "debug" mode (so the report is generated as HTML) - InvenTreeSetting.set_setting('REPORT_ENABLE', True, None) - - # Set the 'debug' setting for the plugin - plugin = registry.get_plugin('inventreelabel') - plugin.set_setting('DEBUG', True) - - # Print via the API (Note: will default to the builtin plugin if no plugin supplied) - url = reverse('api-part-label-print', kwargs={'pk': label.pk}) - - prt = Part.objects.first() - part_pk = prt.pk - part_name = prt.name - - response = self.get(f'{url}?parts={part_pk}', expected_code=200) - data = json.loads(response.content) - self.assertIn('file', data) - - # Find the generated file - output = LabelOutput.objects.last() - - # Open the file and read data - with open(output.label.path, 'r') as f: - content = f.read() - - # Test that each element has been rendered correctly - self.assertIn(f'part: {part_pk} - {part_name}', content) - self.assertIn(f'data: {{"part": {part_pk}}}', content) - if settings.ENABLE_CLASSIC_FRONTEND: - self.assertIn(f'http://testserver/part/{part_pk}/', content) - - # Check that a encoded image has been generated - self.assertIn('data:image/png;charset=utf-8;base64,', content) - - def test_metadata(self): - """Unit tests for the metadata field.""" - for model in [StockItemLabel, StockLocationLabel, PartLabel]: - p = model.objects.first() - - self.assertIsNone(p.get_metadata('test')) - self.assertEqual(p.get_metadata('test', backup_value=123), 123) - - # Test update via the set_metadata() method - p.set_metadata('test', 3) - self.assertEqual(p.get_metadata('test'), 3) - - for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: - p.set_metadata(k, k) - - self.assertEqual(len(p.metadata.keys()), 4) diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index 9cb1f78708..dc1a967554 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "Не е намерена крайна точка на API" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Потребителя няма нужното разрешение, за да вижда този модел" @@ -56,26 +56,26 @@ msgstr "Подробности за грешката могат да се нам msgid "Enter date" msgstr "Въведи дата" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Бележки" @@ -132,7 +132,7 @@ msgstr "Въведеният домейн на електронната поща msgid "Registration is disabled." msgstr "Регистрацията е деактивирана." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Турски" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Виетнамски" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Китайски (опростен)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Китайски (традиционен)" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Потребител" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "родител" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Изгубен" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Върнат" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Изпълнява се" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Изпратено" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "Да" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Наличността е преброена" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Част" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Изпратено" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Изгубен" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Върнат" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Изпълнява се" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Цялостна наличност" @@ -6112,698 +5970,712 @@ msgstr "Цялостна наличност" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Наличност" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Място в склада" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Места в склада" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "Да" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Наличността е преброена" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index e846bd6b8d..b1a73d11a1 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API endpoint nebyl nalezen" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Uživatel nemá právo zobrazit tento model" @@ -56,26 +56,26 @@ msgstr "Podrobnosti o chybě lze nalézt v panelu administrace" msgid "Enter date" msgstr "Zadejte datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Poznámky" @@ -132,7 +132,7 @@ msgstr "Zadaná e-mailová doména není povolena." msgid "Registration is disabled." msgstr "Registrace vypnuta." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turečtina" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamština" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Čínština (zjednodušená)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Čínština (tradiční)" @@ -351,145 +355,145 @@ msgstr "E-mail" msgid "Error running plugin validation" msgstr "Chyba při ověření pluginu" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metadata musí být objekt python dict" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Metadata pluginu" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Pole metadat JSON pro použití externími pluginy" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Nesprávně naformátovaný vzor" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Neznámý formát klíče" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Chybí požadovaný klíč" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Referenční pole nemůže být prázdné" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referenční číslo musí odpovídat požadovanému vzoru" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referenční číslo je příliš velké" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Chybějící soubor" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Příloha" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Vyberte soubor k přiložení" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Odkaz" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Odkaz na externí URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Komentář" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Komentář k souboru" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Uživatel" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "datum přidání" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Název souboru nesmí být prázdný" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Neplatný adresář přílohy" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Název souboru obsahuje nepovolený znak '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Chybějící přípona souboru" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Příloha s tímto názvem již existuje" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Chyba při přejmenování souboru" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 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:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Neplatný výběr" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Název" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Popis" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "nadřazený" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Cesta" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Poznámky (volitelné)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Data čárového kódu" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Data čárového kódu třetí strany" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Hash čárového kódu" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Jedinečný hash dat čárového kódu" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Nalezen existující čárový kód" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Chyba serveru" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Server zaznamenal chybu." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Musí být platné číslo" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL souboru vzdáleného obrázku" msgid "Downloading images from remote URL is not enabled" msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Kontrola procesů na pozadí se nezdařila" @@ -694,202 +698,6 @@ msgstr "Email backend není nakonfigurován" msgid "InvenTree system health checks failed" msgstr "Kontroly zdraví systému InvenTree selhaly" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Nevyřízeno" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Umístěno" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Hotovo" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Zrušeno" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Ztraceno" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Vráceno" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Zpracovává se" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Odesláno" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "OK" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Vyžaduje pozornost" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Poškozeno" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Zničeno" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Odmítnuto" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "V karanténě" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Původní položka sledování zásob" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Položka zásob vytvořena" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Položka zásob upravena" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Přiřazeno výrobní číslo" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Stav zásob sečten" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Zásoba přidána ručně" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Zásoba odebrána ručně" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Umístění změněno" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Stav zásob byl aktualizován" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Nainstalováno do sestavy" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Odstraněno ze sestavy" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Instalovaná položka komponenty" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Odstraněná komponenta" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Rozdělit od nadřazené položky" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Rozdělit podřazený předmět" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Sloučené položky zásob" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Převedeno na variantu" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Výstup objednávky byl vytvořen" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Výstup objednávky sestavení dokončen" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Výstup objednávky sestavení byl odmítnut" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Spotřebováno podle objednávky" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Odesláno v souladu se zákaznickou objednávkou" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Přijato proti objednávce" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Vráceno proti vratce" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Odesláno zákazníkovi" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Vráceno od zákazníka" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Výroba" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Vrátit zpět" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Oprava" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Náhrada" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Vrácení peněz" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Odmítnout" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Neznámá databáze" @@ -938,45 +746,45 @@ msgstr "Informace o systému" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:238 +#: build/api.py:255 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:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Volitelné" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Sledováno" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Přiděleno" msgid "Available" msgstr "Dostupné" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Vytvořit objednávku" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Vytvořit objednávku" msgid "Build Orders" msgstr "Vytvořené objednávky" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Neplatná volba nadřazeného sestavení" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "Musí být specifikován odpovědný uživatel nebo skupina" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Díly obědnávky sestavení nemohou být změněny" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Referenční číslo objednávky" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Reference" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Stručný popis sestavení (nepovinné)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Nadřazená sestava" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Příkaz sestavení pro který je toto sestavení přiděleno" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Díl" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Vyber téma, které chceš stavět" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Referenční číslo prodejní objednávky" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Prodejní příkaz, kterému je tato verze přidělena" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Umístění lokace" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vyberte lokaci, ze které chcete provést inventuru pro sestavu. (nechte prázdné, chcete-li provést inventuru z libovolné lokace)" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Cílová lokace" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Vyberte lokaci, kde budou dokončené položky uloženy" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Množství sestav" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Počet skladových položek k sestavení" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Dokončené položky" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Počet skladových položek, které byly dokončeny" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Stav sestavení" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Datum vytvoření" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Cílové datum dokončení" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Datum dokončení" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "dokončil" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Vystavil" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Uživatel, který vydal tento příkaz k sestavení" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Odpovědný" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Uživatel nebo skupina odpovědná za tento příkaz k sestavení" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Priorita sestavení" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Priorita tohoto příkazu k sestavení" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Kód projektu" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Kód projektu pro objednávku sestavení" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Příkaz k sestavení {build} byl dokončen" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Příkaz k sestavení byl dokončen" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Výstup sestavení neodpovídá příkazu sestavení" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 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:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, 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:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Množství" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Vyžadované množství pro objednávku" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "Vybraná položka zásob neodpovídá řádku BOM" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Cílová skladová položka" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Výstupní část se neshoduje s částí příkazu sestavení" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Automaticky zvolit sériová čísla" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Lokace" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Automaticky zvolit sériová čísla" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Umístění zásob pro seškrábnuté výstupy" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Stav" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Nevyřízeno" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Výroba" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Zrušeno" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Hotovo" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Cílené datum" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Priorita" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Vytvořeno" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Nenastaveno cílené datum" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Dokončeno" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Jméno společnosti" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Výchozí měna" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Stáhnout z URL" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Možné zakoupit" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Prodejné" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Díly jsou prodejné ve výchozím nastavení" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Sledovatelné" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Nehmotné (virtuální)" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Díly jsou nehmotné (virtuální) ve výchozím nastavení" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Zobrazit Import v zobrazeních" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Zobrazit související díly" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Zobrazit související díly pro díl" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Počáteční údaje zásob" -#: common/models.py:1535 +#: common/models.py:1542 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/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Počáteční údaje dodavatele" -#: common/models.py:1542 +#: common/models.py:1549 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/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Formát zobrazení jména dílu" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Formát pro zobrazení názvu dílu" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Výchozí ikona kategorie dílu" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "Výchozí ikona kategorie dílu (prázdné znamená bez ikony)" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Minimální počet desetinných míst u cen" -#: common/models.py:1570 +#: common/models.py:1577 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/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "Maximální počet desetinných míst u cen" -#: common/models.py:1578 +#: common/models.py:1585 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/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Použít ceny dodavatele" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Přepsání historie nákupu" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Velikost stránky" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Výchozí velikost stránky pro PDF reporty" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Povolit testovací reporty" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Povolit generování zkušebních reportů" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Připojit testovací reporty" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Při tisku testovacího reportu, připojte kopii reportu k přidružené skladové položce" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 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/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Automaticky vyplnit sériová čísla" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Automaticky vyplnit sériová čísla ve formulářích" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Odstranit vyčerpané zásoby" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "A build order has been completed" +msgid "Mark Shipped Orders as Complete" +msgstr "Příkaz k sestavení byl dokončen" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Formát data" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Cena" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Obrazek" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Kontaktní e-mailová adresa" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Kontakt" @@ -3949,7 +3827,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Společnost" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Základní díl" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Zvolte díl" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Vyberte výrobce" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "Číslo dílu výrobce" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "Popis dílu výrobce" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Výrobce dílu" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Název parametru" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Hodnota" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Hodnota parametru" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Jednotky" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Dodavatel" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Poznámka" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4170,11 @@ msgstr "Odstranit společnost" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "Stáhnout obrázek z URL" msgid "Delete image" msgstr "Smazat obrázek" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Zákazník" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adresa" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Odstranit" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "Sklad dílu dodavatele" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Umístěno" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,575 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Výstup sestavení je již dokončen" + +#: order/models.py:1030 +msgid "Order is already cancelled" msgstr "" -#: order/models.py:1004 +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Odesláno" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Ztraceno" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Vráceno" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Zpracovává se" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Vrátit zpět" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Oprava" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Náhrada" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Vrácení peněz" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Odmítnout" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5415,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5425,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5440,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5462,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5524,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5570,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5582,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5631,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5672,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5739,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "ID dílu" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Název dílu" @@ -5895,20 +5753,20 @@ msgstr "Název dílu" msgid "Part Description" msgstr "Popis dílu" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5775,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5791,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5808,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Díly" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "IPN dílu" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5974,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategorie dílu" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Kategorie dílů" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Výchozí umístění dílů v této kategorii" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Díly nesmějí být přímo zařazeny do strukturované kategorie, ale mohou být zařazeny jako podkategorie." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "Výchozí klíčová slova pro díly v této kategorii" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Název dílu" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Interní číslo dílu" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "ID dílu nebo název dílu" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "Jedinečná hodnota ID dílu" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "Hodnota IPN dílu" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6697,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6713,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "Aktualizovat díly" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7157,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7255,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7322,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7344,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7393,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7416,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7439,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7510,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7557,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7629,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7709,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7775,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7870,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7897,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7951,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7975,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8003,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8019,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8116,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8179,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8272,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8685,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8710,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "OK" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Vyžaduje pozornost" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Poškozeno" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Zničeno" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Odmítnuto" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "V karanténě" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Původní položka sledování zásob" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Položka zásob vytvořena" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Položka zásob upravena" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Přiřazeno výrobní číslo" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Stav zásob sečten" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Zásoba přidána ručně" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Zásoba odebrána ručně" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Umístění změněno" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Stav zásob byl aktualizován" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Nainstalováno do sestavy" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Odstraněno ze sestavy" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Instalovaná položka komponenty" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Odstraněná komponenta" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Rozdělit od nadřazené položky" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Rozdělit podřazený předmět" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Sloučené položky zásob" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Převedeno na variantu" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Výstup objednávky byl vytvořen" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Výstup objednávky sestavení dokončen" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Výstup objednávky sestavení byl odmítnut" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Spotřebováno podle objednávky" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Odesláno v souladu se zákaznickou objednávkou" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Přijato proti objednávce" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Vráceno proti vratce" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Odesláno zákazníkovi" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Vráceno od zákazníka" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9448,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9468,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9495,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9514,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9560,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Sestavení" @@ -9497,7 +9626,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9657,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9754,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10005,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10049,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10087,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10274,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Odstranit" @@ -10162,7 +10295,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10361,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10383,7 @@ msgid "Home Page" msgstr "Domovská stránka" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10418,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10517,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10740,26 @@ msgstr "Potvrdit" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10960,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10974,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11139,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11329,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11349,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11404,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11573,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12019,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12056,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12089,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12138,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12264,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12502,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12526,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12542,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12762,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12775,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12832,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12886,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12906,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12997,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13059,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13416,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13424,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14070,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14307,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Nastavení oprávnění" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Skupina" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Zobrazit" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Oprávnění k zobrazení položek" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Oprávnění přidat položky" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Změnit" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Oprávnění k úpravě položek" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Oprávnění k odstranění položek" - diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 25c8b552c6..9938f22e73 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API endpoint ikke fundet" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Bruger har ikke tilladelse til at se denne model" @@ -56,26 +56,26 @@ msgstr "Fejloplysninger kan findes i admin panelet" msgid "Enter date" msgstr "Angiv dato" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Bemærkninger" @@ -132,7 +132,7 @@ msgstr "Det angivne e-mail domæne er ikke godkendt." msgid "Registration is disabled." msgstr "Registrering er deaktiveret." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Tyrkisk" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Kinesisk (forenklet)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Kinesisk (traditionelt)" @@ -351,145 +355,145 @@ msgstr "E-mail" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metadata skal være et python dict objekt" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadata felt, til brug af eksterne plugins" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Forkert formateret mønster" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Ukendt formatnøgle angivet" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøgle" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Referencefelt må ikke være tomt" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Reference skal matche det påkrævede mønster" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referencenummer er for stort" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Manglende fil" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Manglende eksternt link" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Vedhæftning" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Vælg fil, der skal vedhæftes" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Link til ekstern URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Kommentar" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Fil kommentar" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Bruger" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "dato for upload" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Filnavn må ikke være tomt" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Ugyldig vedhæftningsmappe" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Filnavn indeholder ugyldigt tegn '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Filnavn mangler filtype" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Vedhæftning med dette filnavn findes allerede" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Fejl ved omdøbning af fil" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Ugyldigt valg" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "overordnet" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Markdown noter (valgfri)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Stregkode Data" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Tredjeparts stregkode data" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Stregkode Hash" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Unik hash af stregkode data" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Eksisterende stregkode fundet" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Serverfejl" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL til ekstern billedfil" msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Kontrol af baggrundstjeneste mislykkedes" @@ -694,202 +698,6 @@ msgstr "E-mail backend ej konfigureret" msgid "InvenTree system health checks failed" msgstr "Helbredstjek af InvenTree system mislykkedes" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Afventende" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Placeret" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Fuldført" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Annulleret" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Mistet" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Returneret" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Igangværende" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Afsendt" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Opmærksomhed påkrævet" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Beskadiget" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Destrueret" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Afvist" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "I karantæne" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Forældet lager sporings post" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Lager-element oprettet" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Redigeret lager-element" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Serienummer tildelt" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Lagerbeholdning optalt" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Lagerbeholdning tilføjet manuelt" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Lagerbeholdning fjernet manuelt" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Lokation ændret" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Lager opdateret" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Monteret i samling" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Fjernet fra samling" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Installeret komponent element" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Fjernet komponent element" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Opdel fra overordnet element" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Opdel underordnet element" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Flettede lagervarer" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Konverteret til variant" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Byggeordre output genereret" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Byggeorder output fuldført" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Brugt efter byggeordre" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Afsendt mod salgsordre" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Modtaget mod indkøbsordre" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Returneret mod returordre" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Sendt til kunde" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Returneret fra kunde" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Produktion" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Retur" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Reparér" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Erstat" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Refusion" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Afvis" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Ukendt database" @@ -938,45 +746,45 @@ msgstr "Systemoplysninger" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Valgfri" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Sporet" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Allokeret" msgid "Available" msgstr "Tilgængelig" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Produktionsordre" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Produktionsordre" msgid "Build Orders" msgstr "Produktionsordrer" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Ugyldigt valg for overordnet produktion" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Byggeordre enhed kan ikke ændres" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Overordnet produktion" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Produktionsordre som er tildelt denne produktion" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Vælg dele til produktion" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Salgsordrereference" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Salgsordre, som er tildelt denne produktion" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Kilde Lokation" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Destinations Placering" -#: build/models.py:240 +#: build/models.py:270 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:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Produktions antal" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Antal lagervarer som skal produceres" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Afsluttede elementer" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Antal lagervarer som er færdiggjort" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Produktions Status" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Oprettelsesdato" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Projekteret afslutningsdato" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Dato for afslutning" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "udført af" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Udstedt af" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Bygge Prioritet" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Afventende" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Produktion" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Annulleret" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Fuldført" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "A build order has been completed" +msgid "Mark Shipped Orders as Complete" +msgstr "En byggeordre er fuldført" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3827,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4170,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Placeret" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Afsendt" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Mistet" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Returneret" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Igangværende" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Retur" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Reparér" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Erstat" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Refusion" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Afvis" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5413,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5423,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5438,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5460,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5522,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5568,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5580,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5629,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5670,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5737,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5751,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5773,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5789,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5806,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5972,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6695,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6711,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7155,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7253,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7320,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7342,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7391,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7414,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7437,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7508,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7555,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7627,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7707,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7773,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7868,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7895,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7949,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7973,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8001,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8017,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8114,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8177,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8270,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8683,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8708,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Opmærksomhed påkrævet" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Beskadiget" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Destrueret" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Afvist" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "I karantæne" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Forældet lager sporings post" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lager-element oprettet" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Redigeret lager-element" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Serienummer tildelt" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Lagerbeholdning optalt" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Lagerbeholdning tilføjet manuelt" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Lagerbeholdning fjernet manuelt" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Lokation ændret" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Lager opdateret" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Monteret i samling" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Fjernet fra samling" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Installeret komponent element" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Fjernet komponent element" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Opdel fra overordnet element" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Opdel underordnet element" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Flettede lagervarer" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Konverteret til variant" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Byggeordre output genereret" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Byggeorder output fuldført" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Brugt efter byggeordre" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Afsendt mod salgsordre" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Modtaget mod indkøbsordre" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Returneret mod returordre" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Sendt til kunde" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Returneret fra kunde" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9446,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9466,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9493,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9512,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9558,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9624,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9655,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9752,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10003,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10047,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10085,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10272,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10293,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10359,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10381,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10416,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10515,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10738,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10958,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10972,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11137,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11327,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11347,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11402,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11571,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12017,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12054,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12087,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12136,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12262,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12500,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12524,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12540,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12760,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12773,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12830,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12884,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12904,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12995,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13057,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13414,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13422,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14068,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14305,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index 8eca26f95c..489cd55ac6 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" @@ -56,26 +56,26 @@ msgstr "Fehlerdetails finden Sie im Admin-Panel" msgid "Enter date" msgstr "Datum eingeben" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Notizen" @@ -132,7 +132,7 @@ msgstr "Die angegebene E-Mail-Domain ist nicht freigegeben." msgid "Registration is disabled." msgstr "Registrierung ist deaktiviert." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -253,7 +253,7 @@ msgstr "Hebräisch" #: InvenTree/locales.py:30 msgid "Hindi" -msgstr "" +msgstr "Hinduistisch" #: InvenTree/locales.py:31 msgid "Hungarian" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Türkisch" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "Ukrainisch" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamesisch" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Chinesisch (Vereinfacht)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" @@ -345,151 +349,151 @@ msgstr "[{site_name}] In App einloggen" #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "" +msgstr "Email" #: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Fehler beim Ausführen der Plugin Validierung" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metadaten müssen ein Python-Dict Objekt sein" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Plugin Metadaten" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "JSON-Metadatenfeld, für die Verwendung durch externe Plugins" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Falsch formatiertes Muster" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Unbekannter Formatschlüssel angegeben" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Erforderlicher Formatschlüssel fehlt" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Referenz-Feld darf nicht leer sein" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referenz muss erforderlichem Muster entsprechen" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referenznummer ist zu groß" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Fehlende Datei" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Fehlender externer Link" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Anhang" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" -msgstr "" +msgstr "Link" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Kommentar" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Datei-Kommentar" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Benutzer" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "Hochladedatum" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Dateiname darf nicht leer sein" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Ungültiges Verzeichnis für Anhang" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Dateiname enthält ungültiges Zeichen '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Dateiendung fehlt" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Anhang mit diesem Dateinamen bereits vorhanden" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Fehler beim Umbenennen" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Doppelte Namen können nicht unter dem selben Elternteil existieren" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Ungültige Auswahl" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" -msgstr "" +msgstr "Name" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beschreibung" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "Eltern" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Pfad" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Markdown Notizen (optional)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Barcode-Daten" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Drittanbieter-Barcode-Daten" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Barcode-Hash" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Eindeutiger Hash der Barcode-Daten" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Bestehender Barcode gefunden" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Serverfehler" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL der Remote-Bilddatei" msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Hintergrund-Prozess-Kontrolle fehlgeschlagen" @@ -694,202 +698,6 @@ msgstr "E-Mail-Backend nicht konfiguriert" msgid "InvenTree system health checks failed" msgstr "InvenTree Status-Überprüfung fehlgeschlagen" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Ausstehend" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Platziert" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Fertig" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Storniert" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Verloren" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Zurückgegeben" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "In Bearbeitung" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Versendet" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "erfordert Eingriff" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Beschädigt" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Zerstört" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Zurückgewiesen" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "In Quarantäne" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Alter Bestand-Verfolgungs-Eintrag" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Lagerartikel erstellt" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Lagerartikel bearbeitet" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Seriennummer hinzugefügt" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Bestand gezählt" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Bestand manuell hinzugefügt" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Bestand manuell entfernt" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Standort geändert" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Lagerbestand aktualisiert" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "In Baugruppe installiert" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Aus Baugruppe entfernt" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Komponente installiert" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Komponente entfernt" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Vom übergeordneten Element geteilt" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Unterobjekt geteilt" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Lagerartikel zusammengeführt" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "In Variante umgewandelt" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Endprodukt erstellt" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Endprodukt fertiggestellt" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Endprodukt abgelehnt" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Durch Bauauftrag verbraucht" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Versandt gegen Verkaufsauftrag" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Gegen Bestellung empfangen" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Zurückgeschickt gegen Rücksendeauftrag" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Zum Kunden geschickt" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Rücksendung vom Kunden" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "in Arbeit" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Zurück" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Reparatur" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Ersetzen" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Rückerstattung" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Ablehnen" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Unbekannte Datenbank" @@ -938,45 +746,45 @@ msgstr "Systeminformationen" msgid "About InvenTree" msgstr "Über InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" -msgstr "" +msgstr "Optional" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Zugeordnet" msgid "Available" msgstr "Verfügbar" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Bauauftrag" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Bauauftrag" msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Ungültige Wahl für übergeordneten Bauauftrag" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Teil in Bauauftrag kann nicht geändert werden" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referenz" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Kurze Beschreibung des Baus (optional)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Teil" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externer Link" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Projektcode" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "Fehler beim Abladen der Aufgabe, um die Build-Allokation abzuschließen" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, 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:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Seriennummern automatisch zuweisen" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Eine Liste von Endprodukten muss angegeben werden" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Lagerort" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "Lagerort für Bauprodukt" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Seriennummern automatisch zuweisen" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "Eine Liste von Endprodukten muss angegeben werden" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" -msgstr "" +msgstr "Status" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" -msgstr "Zugewiesenen Bestand entfernen" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Abzug aller Lagerbestände, die diesem Build bereits zugewiesen wurden" +#: build/serializers.py:613 +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:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:653 +#: build/serializers.py:681 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:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:871 +#: build/serializers.py:907 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:878 +#: build/serializers.py:914 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:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "Fehler beim Starten der automatischen Zuweisung" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Zugewiesener Bestand" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bestellt" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Ausstehend" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "in Arbeit" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Storniert" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Fertig" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Bestand für Bauauftrag erforderlich" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Überfälliger Bauauftrag" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Bestand wurde Bauauftrag noch nicht vollständig zugewiesen" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Zieldatum" @@ -1846,7 +1697,7 @@ msgstr "Bauauftrag war fällig am %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Fertiggestellte Endprodukte" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Auftrag" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Aufgegeben von" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Priorität" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "Bauauftrag löschen" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "Bauftrags-QR-Code" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "Barcode mit Bauauftrag verknüpfen" @@ -1911,8 +1762,8 @@ msgstr "Ausgangs-Lager" msgid "Stock can be taken from any available location." msgstr "Bestand kann jedem verfügbaren Lagerort entnommen werden." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Ziel-Lager" @@ -1926,10 +1777,10 @@ msgstr "Zugewiesene Teile" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "Losnummer" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Erstellt" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Kein Ziel-Datum gesetzt" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Fertig" @@ -2043,11 +1894,11 @@ msgstr "Anhänge" msgid "Build Notes" msgstr "Bauauftrags-Notizen" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "Zuordnung abgeschlossen" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "Alle Zeilen wurden vollständig zugewiesen" @@ -2125,1458 +1976,1485 @@ msgstr "Projektbeschreibung" msgid "User or group responsible for this project" msgstr "Benutzer oder Gruppe verantwortlich für dieses Projekt" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Keine Gruppe" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Eine leere Domain ist nicht erlaubt." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ungültiger Domainname: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Kein Plugin" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "Eine Einstellung wurde geändert, die einen Neustart des Servers erfordert" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Ausstehende Migrationen" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "Anzahl der ausstehenden Datenbankmigrationen" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Name der Serverinstanz" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Anzeige von `Über` einschränken" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Zeige das `Über` Fenster nur Administratoren" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Firmenname" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "interner Firmenname" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Standardwährung" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "Wählen Sie die Basiswährung für Preisberechnungen aus" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "Währungsaktualisierungsintervall" -#: common/models.py:1313 +#: common/models.py:1314 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/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "Tage" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "Währungs-Aktualisierungs-Plugin" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "Zu verwendendes Währungs-Aktualisierungs-Plugin" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Download-Größenlimit" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "Maximal zulässige Größe für heruntergeladene Bilder" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "Benutzer-Agent zum Herunterladen von Daten" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "Strenge URL-Prüfung" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "Erfordert die Schema-Spezifikation bei der Validierung von URLs" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Bestätigung verpflichtend" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Eine ausdrückliche Benutzerbestätigung für bestimmte Aktionen erfordern." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Baumtiefe" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standard Ebene für Baumansicht. Tiefere Ebenen können bei Bedarf nachgeladen werden." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Prüfungsintervall aktualisieren" -#: common/models.py:1369 +#: common/models.py:1370 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/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Automatische Sicherung" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Intervall für automatische Sicherung" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Anzahl der Tage zwischen automatischen Sicherungen" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Aufgabenlöschinterval" -#: common/models.py:1390 +#: common/models.py:1391 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/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "Löschintervall für Fehlerprotokolle" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "Fehlerprotokolle werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "Löschintervall für Benachrichtigungen" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "Benutzerbenachrichtigungen werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "Barcode-Scanner Unterstützung im Webinterface aktivieren" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Barcode-Eingabeverzögerung" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Verzögerungszeit bei Barcode-Eingabe" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "Artikelrevisionen" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Revisions-Feld für Artikel aktivieren" -#: common/models.py:1440 -msgid "IPN Regex" +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" msgstr "" -#: common/models.py:1441 +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 +msgid "IPN Regex" +msgstr "IPN Regex" + +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Vorlage" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Baugruppe" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponente" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Kaufbar" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Verkäuflich" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Nachverfolgbar" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Import in Ansichten anzeigen" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Importassistent in einigen Teil-Ansichten anzeigen" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Initialer Lagerbestand" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "Erstellen von Lagerbestand beim Hinzufügen eines neuen Teils erlauben" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Initiale Lieferantendaten" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Erstellen von Lieferantendaten beim Hinzufügen eines neuen Teils erlauben" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Standardsymbol der Teilkategorie" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "Parameter Einheiten durchsetzen" -#: common/models.py:1562 +#: common/models.py:1569 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/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Dezimalstellen für minimalen Preis" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mindestanzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "Dezimalstellen für maximalen Preis" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximale Anzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Zulieferer-Preise verwenden" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Kaufverlauf überschreiben" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Lagerartikel-Preis verwenden" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Lagerartikelpreis Alter" -#: common/models.py:1610 +#: common/models.py:1617 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/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Variantenpreise verwenden" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Nur aktive Varianten" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "Intervall für Neuberechnung von Preisen" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Interne Preise" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/models.py:1662 +#: common/models.py:1669 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/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "Berichtsfehler protokollieren" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Seitengröße" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Testberichte aktivieren" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Erstellung von Test-Berichten aktivieren" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Testberichte anhängen" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Beim Drucken eines Testberichts dem zugehörigen Lagerbestand eine Kopie des Testberichts beifügen" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Seriennummern automatisch ausfüllen" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Seriennummern in Formularen automatisch ausfüllen" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" -msgstr "" +msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "Vorlage für die Generierung von Standard-Losnummern für Lagerbestände" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie ablaufen" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "Zeige installierte Lagerartikel" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "Prüfe BOM bei der Installation von Elementen" -#: common/models.py:1779 +#: common/models.py:1786 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/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand" + +#: common/models.py:1794 +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/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bauaufträge" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" -msgstr "" +msgstr "Verantwortlicher Besitzer erforderlich" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" -msgstr "" +msgstr "Jeder Bestellung muss ein verantwortlicher Besitzer zugewiesen werden" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "Blockieren bis Test bestanden" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Verhindert die Fertigstellung bis alle erforderlichen Tests bestanden sind" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "Rücksendungen aktivieren" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "Aktivieren der Rücksendung-Funktion in der Benutzeroberfläche" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "Referenz Muster für Rücksendungen" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Rücksendungen" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "Abgeschlossene Rücksendungen bearbeiten" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "Bearbeitung von Rücksendungen nach Abschluss erlauben" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "Auftragsreferenz-Muster" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Aufträge" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "Abgeschlossene Aufträge bearbeiten" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bearbeitung von Aufträgen nach Versand oder Abschluss erlauben" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark this order as complete?" +msgid "Mark Shipped Orders as Complete" +msgstr "Diese Bestellung als vollständig markieren?" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bestellungen" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bearbeitung von Einkaufsaufträgen nach Versand oder Abschluss erlauben" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "Bestellungen automatisch abschließen" -#: common/models.py:1887 +#: common/models.py:1910 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/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Selbstregistrierung über SSO für Benutzer auf den Anmeldeseiten aktivieren" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Passwort zweimal" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Anmeldung auf bestimmte Domänen beschränken (kommagetrennt, beginnend mit @)" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "Gruppe der neue Benutzer bei der Registrierung zugewiesen werden" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/models.py:1968 +#: common/models.py:1991 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/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "Nach Plugin-Aktualisierungen suchen" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "Periodische Überprüfungen auf Updates für installierte Plugins aktivieren" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "Projektcodes aktivieren" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "Aktiviere Projektcodes für die Verfolgung von Projekten" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "Inventurfunktionen" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Inventur-Funktionen zur Aufzeichnung von Lagerbeständen und zur Berechnung des Lagerwerts aktivieren" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "Externe Standorte ausschließen" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Lagerartikeln in externen Standorten in der Berechnungen zur Bestandsaufnahme ausschließen" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "Automatische Inventur-Periode" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Anzahl der Tage zwischen automatischen Bestandsaufnahmen (zum Deaktivieren auf Null setzen)" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "Löschintervall für Berichte" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Inventurberichte werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "Vollständige Namen von Benutzern anzeigen" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "Teststation-Daten aktivieren" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Einstellungs-Schlüssel (muss einzigartig sein, Groß-/ Kleinschreibung wird nicht beachtet)" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Ausblenden inaktiver Teile in den auf der Startseite angezeigten Ergebnissen" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Abonnierte Teile anzeigen" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Zeige abonnierte Teile auf der Startseite" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Abonnierte Kategorien anzeigen" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Zeige abonnierte Teilkategorien auf der Startseite" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Neueste Teile anzeigen" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Zeige neueste Teile auf der Startseite" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" -msgstr "" +msgstr "Zeige ungültige Stücklisten" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Zeige Stücklisten, die noch nicht validiert sind, auf der Startseite" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Neueste Bestandänderungen anzeigen" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Zeige zuletzt geänderte Lagerbestände auf der Startseite" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Niedrigen Bestand anzeigen" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Zeige geringen Bestand auf der Startseite" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Lerren Bestand anzeigen" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Zeige aufgebrauchte Lagerartikel auf der Startseite" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Benötigten Bestand anzeigen" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Zeige Bestand für Bauaufträge auf der Startseite" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Abgelaufenen Bestand anzeigen" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Zeige abgelaufene Lagerbestände auf der Startseite" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Alten Bestand anzeigen" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Zeige überfällige Lagerartikel auf der Startseite" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Ausstehende Bauaufträge anzeigen" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Zeige ausstehende Bauaufträge auf der Startseite" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Zeige überfällige Bauaufträge" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Zeige überfällige Bauaufträge auf der Startseite" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "Ausstehende POs anzeigen" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "Zeige ausstehende POs auf der Startseite" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Überfällige POs anzeigen" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "Zeige überfällige POs auf der Startseite" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "Ausstehende SOs anzeigen" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "Zeige ausstehende SOs auf der Startseite" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Überfällige SOs anzeigen" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "Zeige überfällige SOs auf der Startseite" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "Ausstehende Versandaufträge anzeigen" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "Ausstehende Versandaufträge auf der Startseite anzeigen" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Zeige Neuigkeiten" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Neuigkeiten auf der Startseite anzeigen" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "Label inline anzeigen" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-Labels im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "Standard-Etikettendrucker" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "Einen standardmäßig ausgewählten Etikettendrucker konfigurieren" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "Berichte inline anzeigen" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-Berichte im Browser anzeigen, anstatt als Datei herunterzuladen" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Teile suchen" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "Teile in der Suchvorschau anzeigen" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "Zulieferteile durchsuchen" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "Zuliefererteile in der Suchvorschau anzeigen" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Herstellerteile durchsuchen" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "Herstellerteile in der Suchvorschau anzeigen" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Inaktive Teile ausblenden" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "Inaktive Teile in der Suchvorschau ausblenden" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "Kategorien durchsuchen" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "Teilekategorien in der Suchvorschau anzeigen" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Bestand durchsuchen" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Lagerartikel in Suchvorschau anzeigen" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Nicht verfügbare Artikel ausblenden" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nicht verfügbare Lagerartikel aus der Suchvorschau ausschließen" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Lagerorte durchsuchen" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "Lagerorte in Suchvorschau anzeigen" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Firmen durchsuchen" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "Firmen in der Suchvorschau anzeigen" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Bauaufträge durchsuchen" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Bauaufträge in der Suchvorschau anzeigen" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Bestellungen durchsuchen" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "Bestellungen in der Suchvorschau anzeigen" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktive Bestellungen ausblenden" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktive Bestellungen in der Suchvorschau ausblenden" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Aufträge durchsuchen" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "Aufträge in der Suchvorschau anzeigen" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "Inaktive Aufträge ausblenden" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktive Aufträge in der Suchvorschau ausblenden" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Suche nach Rücksendungen" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "Rücksendungen in der Suchvorschau anzeigen" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "Inaktive Rücksendungen ausblenden" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "Inaktive Rücksendungen in der Suchvorschau ausblenden" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "Anzahl Suchergebnisse" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "Anzahl der Ergebnisse, die in der Vorschau pro Sektion angezeigt werden sollen" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Regex Suche" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "Reguläre Ausdrücke in Suchabfragen aktivieren" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "Ganzes Wort suchen" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "Suchabfragen liefern Ergebnisse für ganze Wortkombinationen" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "zeige Bestand in Eingabemasken" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "Zeige den verfügbaren Bestand in einigen Eingabemasken" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "Esc-Taste schließt Formulare" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "Benutze die Esc-Taste, um Formulare zu schließen" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Fixierter Navigationsleiste" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "Position der Navigationsleiste am oberen Bildschirmrand fixieren" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Datumsformat" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Bevorzugtes Format für die Anzeige von Daten" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Teilzeitplanung" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "Zeige Zeitplanung für Teile" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventur" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Zeigt Inventur-Informationen an (falls die Inventurfunktion aktiviert ist)" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "Zeichenkettenlänge in Tabellen" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "Maximale Länge für Zeichenketten, die in Tabellenansichten angezeigt werden" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "Standardvorlage für Teilebeschriftung" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "Die Teil-Etikettenvorlage, die automatisch ausgewählt werden soll" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "Lagerartikel-Standardvorlage" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "Die Lagerartikel-Etikettenvorlage soll automatisch ausgewählt werden" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "Standardetikettenvorlage für Lagerstandort" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "Die Lagerstandort-Etikettenvorlage, die automatisch ausgewählt werden soll" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" -msgstr "" +msgstr "Standardetikettenvorlage für Bauauftragspositionen" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" -msgstr "" +msgstr "Die Bauauftragspositionsetikettenvorlage welche automatisch ausgewählt werden soll" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "Fehlerberichte empfangen" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "Benachrichtigungen bei Systemfehlern erhalten" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "Zuletzt verwendete Druckmaschinen" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "Die zuletzt benutzten Druckmaschinen für einen Benutzer speichern" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Preis" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "Name für diesen Webhook" msgid "Active" msgstr "Aktiv" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" -msgstr "" +msgstr "Token" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" -msgstr "" +msgstr "Host" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" -msgstr "" +msgstr "Body" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "ID" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titel" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Autor" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Gelesen" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Bild" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "Bilddatei" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "Einheitsname muss eine gültige Kennung sein" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "Einheitsname" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "" +msgstr "Symbol" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "Optionales Einheitssymbol" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" -msgstr "" +msgstr "Definition" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "Einheitsdefinition" @@ -3736,7 +3614,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:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "Artikel erhalten" @@ -3752,63 +3630,63 @@ msgstr "Artikel wurden aus einer Rücksendung erhalten" msgid "Error raised by plugin" msgstr "Fehler in Plugin aufgetreten" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "Wird ausgeführt" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "Anstehende Aufgaben" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "Fehlgeschlagene Aufgaben" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "Aufgabe-ID" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "Eindeutige Aufgaben-ID" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "Sperren" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "Sperrzeit" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "Aufgabenname" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "Funktion" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "Funktionsname" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "Parameter" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "Aufgaben-Parameter" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "Schlüsselwort Parameter" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "Schlüsselwort Parameter für Aufgaben" @@ -3852,23 +3730,23 @@ msgstr "Vorheriger Schritt" #: company/api.py:164 msgid "Part is Active" -msgstr "" +msgstr "Teil ist aktiv" #: company/api.py:168 msgid "Manufacturer is Active" -msgstr "" +msgstr "Hersteller ist aktiv" #: company/api.py:317 msgid "Supplier Part is Active" -msgstr "" +msgstr "Lieferantenteil ist aktiv" #: company/api.py:321 msgid "Internal Part is Active" -msgstr "" +msgstr "Internes Teil ist aktiv" #: company/api.py:325 msgid "Supplier is Active" -msgstr "" +msgstr "Lieferant ist aktiv" #: company/models.py:114 msgid "Company description" @@ -3882,7 +3760,7 @@ msgstr "Firmenbeschreibung" #: templates/InvenTree/settings/plugin_settings.html:54 #: templates/js/translated/company.js:532 msgid "Website" -msgstr "" +msgstr "Webseite" #: company/models.py:120 msgid "Company website URL" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Kontakt-Email" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Kontakt" @@ -3917,7 +3795,7 @@ msgstr "Link auf externe Firmeninformation" #: company/models.py:160 msgid "Is this company active?" -msgstr "" +msgstr "Ist dieses Unternehmen aktiv?" #: company/models.py:165 msgid "is customer" @@ -3949,7 +3827,7 @@ msgstr "Standard-Währung für diese Firma" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Firma" @@ -4041,19 +3919,19 @@ msgstr "Versandnotizen für interne Verwendung" msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Teil auswählen" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,15 +3946,15 @@ msgid "Select manufacturer" msgstr "Hersteller auswählen" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" -msgstr "" +msgstr "MPN" #: company/models.py:508 msgid "Manufacturer Part Number" @@ -4086,61 +3964,60 @@ msgstr "Hersteller-Teilenummer" msgid "URL for external manufacturer part link" msgstr "Externe URL für das Herstellerteil" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "Teilbeschreibung des Herstellers" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Herstellerteil" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Parametername" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Wert" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Parameterwert" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Einheiten" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Parametereinheit" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "Packeinheiten müssen mit den Basisteileinheiten kompatibel sein" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "Packeinheiten müssen größer als Null sein" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Zulieferer" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" -msgstr "" +msgstr "Ist dieser Lieferantenteil aktiv?" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Herstellerteil auswählen" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Notiz" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Verpackungen" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "Packmenge" -#: company/models.py:871 +#: company/models.py:873 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:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "Vielfache" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Mehrere bestellen" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "Verfügbare Menge von Lieferanten" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "Verfügbarkeit aktualisiert" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" @@ -4257,7 +4134,7 @@ msgstr "Auf Lager" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inaktiv" @@ -4293,11 +4170,11 @@ msgstr "Firma löschen" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "Artikelbild" @@ -4316,15 +4193,15 @@ msgstr "Bild von URL herunterladen" msgid "Delete image" msgstr "Bild löschen" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Kunde" msgid "Uses default currency" msgstr "verwendet Standard-Währung" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adresse" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "Bild entfernen" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "Verknüpftes Bild von dieser Firma entfernen" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Entfernen" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "Bild hochladen" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "Bild herunterladen" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "Herstellerteil löschen" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Internes Teil" @@ -4530,7 +4407,7 @@ msgstr "Keine Herstellerdaten verfügbar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "Adressen" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Zuliefererteil" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "Keine Lieferanteninformationen verfügbar" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "Lieferanten-Teilenummer" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "Zulieferer-Bestand" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Neuen Lagerartikel hinzufügen" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Neuer Lagerartikel" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "Verfügbarkeit der Teile aktualisieren" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Firmen" msgid "New Company" msgstr "Neue Firma" -#: label/api.py:247 -msgid "Error printing label" -msgstr "Fehler beim Drucken des Labels" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Platziert" -#: label/models.py:120 -msgid "Label name" -msgstr "Label Name" - -#: label/models.py:128 -msgid "Label description" -msgstr "Label Beschreibung" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "Label-Vorlage-Datei" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Aktiviert" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Label-Vorlage ist aktiviert" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Breite [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Label-Breite in mm" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Höhe [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Label-Höhe in mm" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Dateinamen-Muster" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "Muster für die Erstellung von Label-Dateinamen" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Filter" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR-Code" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-Code" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "Kopien" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "Anzahl der zu druckenden Kopien für jedes Label" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "Verbunden" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Unbekannt" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "Drucken" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "Keine Medien" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "Verbindung getrennt" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "Etikettendrucker" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "Drucken Sie Etiketten direkt für verschiedene Artikel." -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "Druckerstandort" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "Den Drucker an einen bestimmten Ort aufstellen" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "Konfigurationstyp" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Gesamtpreis" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Bestellstatus" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" -msgstr "" +msgstr "Hat Preise" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "Keine passende Bestellung gefunden" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Bestellung" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" -msgstr "" +msgstr "Bestellung abgeschlossen" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" -msgstr "" +msgstr "Bestellung ausstehend" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Bestellung" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Rücksendeauftrag" @@ -4976,517 +4780,577 @@ msgstr "Auftragswährung" 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:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "Kontakt stimmt nicht mit der ausgewählten Firma überein" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "Auftragsbeschreibung (optional)" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "Projektcode für diesen Auftrag auswählen" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "Erstellt von" -#: order/models.py:321 +#: order/models.py:333 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:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "Ansprechpartner für diesen Auftrag" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "Firmenadresse für diesen Auftrag" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "Empfangen von" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "Versand von" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "Auftrag kann nicht abgeschlossen werden, da keine Teile zugewiesen wurden" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Endprodukt bereits hergstellt" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "Bestellung kann nicht verworfen werden" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 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:1013 +#: order/models.py:1043 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:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:1296 +#: order/models.py:1345 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:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "Positionsbeschreibung (optional)" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "Kontext" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "gelöscht" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Empfangen" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Wo möchte der Käufer diesen Artikel gelagert haben?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "Ein virtuelles Teil kann nicht einem Auftrag zugeordnet werden" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Versendet" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Lieferdatum" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "Versanddatum" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Sendung" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:1848 +#: order/models.py:1899 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:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Position" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Position" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "Rücksendungsreferenz" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "Firma von der die Artikel zurückgeschickt werden" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "Status der Rücksendung" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "Nur serialisierte Artikel können einer Rücksendung zugeordnet werden" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "Artikel zur Rücksendung auswählen" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "Empfangsdatum" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "Das Datum des Empfangs dieses Rücksendeartikels" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Ergebnis" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "Ergebnis für dieses Zeilenelement" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "Kosten für die Rückgabe oder Reparatur dieses Objektes" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "Positionen" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "Abgeschlossene Positionen" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:477 +#: order/serializers.py:481 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:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "Position" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" -msgstr "" +msgstr "Barcode" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "Folgende Seriennummern sind bereits zugewiesen" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:1684 +#: order/serializers.py:1688 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:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "Verkaufspreis-Währung" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Verloren" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Zurückgegeben" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "In Bearbeitung" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Zurück" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Reparatur" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Ersetzen" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Rückerstattung" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Ablehnen" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Überfällige Bestellung" @@ -5553,7 +5417,7 @@ msgstr "Bestellung als vollständig markieren" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Auftrag fertigstellen" @@ -5563,13 +5427,13 @@ msgstr "Vorschaubild des Lieferanten" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Bestellreferenz" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Bestellungsbeschreibung" @@ -5578,19 +5442,19 @@ msgid "No suppplier information available" msgstr "Keine Lieferanteninformationen verfügbar" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "Abgeschlossene Positionen" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Unvollständig" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Aufgegeben" @@ -5600,15 +5464,15 @@ msgstr "Gesamtsumme" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "Gesamtkosten konnten nicht berechnet werden" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "Bestellung QR-Code" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "Barcode mit Bestellung verknüpfen" @@ -5662,11 +5526,11 @@ msgstr "Auswahl duplizieren" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5572,6 @@ msgstr "Bestellung ist bereits verarbeitet. Dateien können nicht hochgeladen we msgid "Step %(step)s of %(count)s" msgstr "Schritt %(step)s von %(count)s" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "Positionen" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Empfangene Lagerartikel" @@ -5729,7 +5584,7 @@ msgstr "Bestellungs-Positionen" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Position hinzufügen" @@ -5778,30 +5633,30 @@ msgid "Print packing list" msgstr "Paketliste drucken" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "Kundenreferenz" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Gesamtkosten" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "QR-Code Bestellung zurückgeben" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "Barcode mit Rücksendung verknüpfen" @@ -5819,25 +5674,30 @@ msgid "Ship Items" msgstr "Versandartikel" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "Als verschickt markieren" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Auftrag abschließen" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "Dieser Auftrag ist nicht vollständig zugeordnet" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "Auftrag QR-Code" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "Barcode mit Verkaufsauftrag verknüpfen" @@ -5881,12 +5741,12 @@ msgstr "Stückpreis für {part} auf {price} aktualisiert" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "{part} Stückpreis auf {price} und Menge auf {qty} aktualisiert" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "Teil-ID" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Name des Teils" @@ -5895,20 +5755,20 @@ msgstr "Name des Teils" msgid "Part Description" msgstr "Beschreibung des Teils" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Version" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Schlüsselwörter" @@ -5917,15 +5777,15 @@ msgstr "Schlüsselwörter" msgid "Part Image" msgstr "Artikelbild" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "Kategorie-ID" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "Kategoriename" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "Standard-Standortnummer" @@ -5933,11 +5793,11 @@ msgstr "Standard-Standortnummer" msgid "Default Supplier ID" msgstr "Standard-Lieferantennummer" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variante von" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimaler Bestand" @@ -5950,160 +5810,164 @@ msgstr "Benutzt in" msgid "Building" msgstr "Im Bau" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "Eltern ID" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "Name des übergeordneten Teils" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "Pfad zur Kategorie" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Teile" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "Stücklistenebene" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "Stücklisten-Position ID" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "Übergeordnete IPN" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "Teil IPN" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "Markiert" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "Nach markierten Kategorien filtern" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "Ebenen" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "Filter nach Kategorietiefe" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "Mehrstufig" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "Unterkategorien in gefilterte Ergebnisse einbeziehen" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "Übergeordnetes" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "Nach übergeordneter Kategorie filtern" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "Baum ausschließen" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "Unterkategorien in der angegebenen Kategorie ausschließen" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "Ergebnisse" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "Eingehende Bestellung" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "Ausgehender Auftrag" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "Lagerartikel produziert von Bauauftrag" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "Lagerartikel für Bauauftrag benötigt" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "Gültig" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "Diese Option muss ausgewählt werden" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Kategorie" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "Verwendet" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standard-Lagerort" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Gesamtbestand" @@ -6112,698 +5976,712 @@ msgstr "Gesamtbestand" msgid "Input quantity for price calculation" msgstr "Menge für die Preisberechnung" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strukturell" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Teile können nicht direkt einer strukturellen Kategorie zugeordnet werden, können aber untergeordneten Kategorien zugeordnet werden." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Standard Stichwörter" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Symbol" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Symbol (optional)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Sie können diese Teilekategorie nicht als strukturell festlegen, da ihr bereits Teile zugewiesen sind!" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "Ungültige Auswahl für übergeordnetes Teil" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, 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:551 +#: part/models.py:594 #, 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:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN muss mit Regex-Muster {pattern} übereinstimmen" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "Artikelbeschreibung (optional)" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Standard Zulieferer" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "Standard Zuliefererteil" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:1051 +#: part/models.py:1094 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:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "Letzte Inventur" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Datum" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "Zusätzliche Notizen" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "Benutzer, der diese Inventur durchgeführt hat" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Bericht" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "Inventur-Berichtsdatei (intern generiert)" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Anzahl der Teile" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "Anzahl der Teile, die von der Inventur abgedeckt werden" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "Benutzer, der diesen Inventurbericht angefordert hat" -#: part/models.py:3435 +#: part/models.py:3478 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:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "Test-Vorlagen können nur für verfolgbare Teile angelegt werden" -#: part/models.py:3457 +#: part/models.py:3500 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:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Aktiviert" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Benötigt" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3506 +#: part/models.py:3549 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:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3513 +#: part/models.py:3556 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:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "Name des Parameters" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" -msgstr "" +msgstr "Checkbox" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "Ausgangsteil" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "Wert" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Parameter Wert" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "Teilnummer oder Teilname" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "Eindeutige Teil-ID" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "IPN-Wert des Teils" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "Stufe" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "Stücklistenebene" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4048 +#: part/models.py:4091 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:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Überschuss" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Geschätzter Ausschuss (absolut oder prozentual)" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "überprüft" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4090 +#: part/models.py:4133 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:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Varianten zulassen" -#: part/models.py:4096 +#: part/models.py:4139 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:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4419 +#: part/models.py:4462 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:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" @@ -6821,7 +6699,7 @@ msgstr "Ergebnisse" msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" @@ -6837,299 +6715,299 @@ msgstr "Keine Teile ausgewählt" msgid "Select category" msgstr "Kategorie auswählen" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:480 +#: part/serializers.py:490 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:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "Externes Lager" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Inventurbericht auf ein bestimmtes Teil und alle Variantenteile beschränken" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Inventurbericht auf eine bestimmte Teilekategorie und alle untergeordneten Kategorien beschränken" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Inventurbericht auf einen bestimmten Lagerort und alle untergeordneten Lagerorte beschränken" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "Externen Bestand ausschließen" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "Lagerartikel an externen Orten ausschließen" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Bericht generieren" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "Erstelle Berichtsdatei mit berechneten Inventurdaten" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "Teile aktualisieren" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "Angegebene Teile mit berechneten Inventurdaten aktualisieren" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "Inventur-Funktionalität ist nicht aktiviert" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, 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:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "Bestehende Stückliste löschen" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "Bestehende Stücklisten-Positionen vor dem Importieren entfernen" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "Keine Teilspalte angegeben" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "Mehrere übereinstimmende Teile gefunden" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "Keine passenden Teile gefunden" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "Teil ist nicht als Komponente angelegt" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "Menge nicht angegeben" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Ungültige Menge" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "Mindestens eine Stückliste-Position ist erforderlich" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "Gesamtstückzahl" @@ -7281,7 +7159,7 @@ msgstr "Inventurinformationen hinzufügen" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "Inventur" @@ -7379,15 +7257,15 @@ msgstr "Zulieferer" msgid "Part Manufacturers" msgstr "Teil-Hersteller" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "Verknüpftes Teil" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "Verknüpftes Teil hinzufügen" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "Testergebnis-Vorlage hinzufügen" @@ -7424,7 +7302,7 @@ msgstr "Teile-Importvorlage herunterladen" #: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 #: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 msgid "Format" -msgstr "" +msgstr "Format" #: part/templates/part/import_wizard/part_upload.html:93 #: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 @@ -7446,7 +7324,7 @@ msgstr "Benachrichtigungen für dieses Teil abonnieren" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Label drucken" @@ -7468,7 +7346,7 @@ msgstr "Bestand zählen" msgid "Transfer part stock" msgstr "Teilbestand verschieben" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "Teile Aktionen" @@ -7517,7 +7395,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Teil ist virtuell (kein physisches Teil)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "Teildetails anzeigen" @@ -7540,7 +7418,7 @@ msgid "Minimum stock level" msgstr "Minimaler Bestand" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7441,19 @@ msgstr "QR-Code Teil" msgid "Link Barcode to Part" msgstr "Barcode mit Teil verknüpfen" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "Berechnen" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "Verknüpftes Bild von diesem Teil entfernen" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "Keine passenden Bilder gefunden" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "Teildetails ausblenden" @@ -7634,8 +7512,8 @@ msgstr "Varianten" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Bestand" @@ -7681,7 +7559,7 @@ msgstr "Bearbeiten" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Zuletzt aktualisiert" @@ -7691,11 +7569,11 @@ msgstr "Preiskategorie" #: part/templates/part/prices.html:38 part/templates/part/prices.html:128 msgid "Minimum" -msgstr "" +msgstr "Minimum" #: part/templates/part/prices.html:39 part/templates/part/prices.html:129 msgid "Maximum" -msgstr "" +msgstr "Maximum" #: part/templates/part/prices.html:51 part/templates/part/prices.html:174 msgid "Internal Pricing" @@ -7753,7 +7631,7 @@ msgid "Update Pricing" msgstr "Preise aktualisieren" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7711,7 @@ msgstr "Teilbild nicht gefunden" msgid "Part Pricing" msgstr "Teilbepreisung" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "Das Plugin kann nicht gelöscht werden, da es derzeit aktiv ist" @@ -7899,8 +7777,8 @@ msgstr "Barcode stimmt nicht mit einem vorhandenen Lagerartikel überein" msgid "Stock item does not match line item" msgstr "Lagerartikel stimmt nicht mit dem Element überein" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Unzureichender Bestand verfügbar" @@ -7994,25 +7872,25 @@ msgstr "Sendung wurde bereits geliefert" msgid "Quantity to allocate" msgstr "Zugewiesene Menge" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "Labeldruck fehlgeschlagen" -#: plugin/base/label/mixins.py:63 +#: 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:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "Fehler beim Rendern des Etikett als HTML" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" -msgstr "Fehler beim Rendern des Etikett als PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" +msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" -msgstr "" +msgstr "InvenTree Barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:26 msgid "Provides native support for barcodes" @@ -8021,7 +7899,7 @@ msgstr "Bietet native Unterstützung für Barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7953,19 @@ msgstr "InvenTree Währungsumstellung" msgid "Default currency exchange integration" msgstr "Standard-Wechselkursintegration" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF-Etikettendrucker" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 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:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "Debug-Modus" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug-Modus aktivieren - gibt Roh-HTML statt PDF zurück" @@ -8099,11 +7977,11 @@ msgstr "InvenTree Maschinen-Etikettendrucker" msgid "Provides support for printing using a machine" msgstr "Unterstützt das Drucken mit einer Maschine" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "Zuletzt benutzt" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "Optionen" @@ -8127,7 +8005,7 @@ msgstr "Rand" msgid "Print a border around each label" msgstr "Einen Rahmen um jedes Label drucken" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "Querformat" @@ -8143,11 +8021,11 @@ msgstr "InvenTree Etikettendrucker" msgid "Arrays multiple labels onto a single sheet" msgstr "Anordnen mehrerer Etiketten auf einem einzigen Blatt" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "Label ist zu groß für Seitengröße" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "Es wurden keine Etiketten generiert" @@ -8240,61 +8118,62 @@ msgstr "Plugin kann nicht deinstalliert werden, da es momentan aktiv ist" msgid "Uninstalled plugin successfully" msgstr "Plugin erfolgreich deinstallieren" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "Plugin-Konfiguration" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "Plugin-Konfigurationen" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "Schlüssel" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "Schlüssel des Plugins" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "Name des Plugins" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "Paket-Name" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "Name des installierten Paketes, wenn das Plugin über PIP installiert wurde" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "Ist das Plugin aktiv" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Installiert" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "Beispiel-Plugin" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Integriertes Plugin" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "Paket-Plugin" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" -msgstr "" +msgstr "Plugin" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "Methode" @@ -8302,17 +8181,17 @@ msgstr "Methode" msgid "No author found" msgstr "Kein Autor gefunden" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Plugin '{p}' ist nicht kompatibel mit der aktuellen InvenTree Version {v}" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin benötigt mindestens Version {v}" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin benötigt maximal Version {v}" @@ -8373,7 +8252,7 @@ msgstr "Name für das Plugin-Paket - kann auch einen Versionstext enthalten" #: templates/InvenTree/settings/plugin_settings.html:42 #: templates/js/translated/plugin.js:86 msgid "Version" -msgstr "" +msgstr "Version" #: plugin/serializers.py:101 msgid "Version specifier for the plugin. Leave blank for latest version." @@ -8395,279 +8274,363 @@ msgstr "Installation nicht bestätigt" msgid "Either packagename of URL must be provided" msgstr "Entweder Paketname oder URL muss angegeben werden" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "Komplett neu laden" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "Führe ein vollständiges Nachladen der Plugin-Registrierung durch" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "Neuladen erzwingen" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Erzwinge ein erneutes Laden der Plugin-Registrierung, auch wenn sie bereits geladen ist" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "Plugins sammeln" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "Plugins sammeln und zur Registrierung hinzufügen" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "Plugin aktivieren" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "Dieses Plugin aktivieren" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "Konfiguration löschen" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "Plugin-Konfiguration aus der Datenbank löschen" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Keine korrekten Objekte für Vorlage gegeben" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "Teile" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "Fehler beim Drucken des Labels" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Vorlagendatei '{template}' fehlt oder existiert nicht" -#: report/api.py:319 -msgid "Test report" -msgstr "Testbericht" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" -msgstr "" +msgstr "A4" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" -msgstr "" +msgstr "A3" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "US-Legal" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "US-Letter" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Vorlagen Name" -#: report/models.py:183 -msgid "Report template file" -msgstr "Bericht-Vorlage Datei" +#: report/models.py:156 +msgid "Template description" +msgstr "" -#: report/models.py:190 -msgid "Report template description" -msgstr "Bericht-Vorlage Beschreibung" +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "Bericht Revisionsnummer (autom. erhöht)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Dateinamen-Muster" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Filter" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "Seitengröße für PDF-Berichte" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "Bericht in Querformat anzeigen" -#: report/models.py:318 -msgid "Pattern for generating report filenames" -msgstr "Muster für die Erstellung von Berichtsdateinamen" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Breite [mm]" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "Bericht-Vorlage ist ein" +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Label-Breite in mm" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "Lagerartikel-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Höhe [mm]" -#: report/models.py:354 -msgid "Include Installed Tests" -msgstr "einfügen Installiert in Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Label-Höhe in mm" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" -msgstr "Test-Ergebnisse für Lagerartikel in Baugruppen einschließen" - -#: report/models.py:424 -msgid "Build Filters" -msgstr "Bauauftrag Filter" - -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "Bau-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" - -#: report/models.py:464 -msgid "Part Filters" -msgstr "Teil Filter" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "Teile-Abfragefilter (kommagetrennte Liste mit Schlüssel=Wert-Paaren)" - -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "Bestellungs-Abfragefilter" - -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "Auftrags-Abfragefilter" - -#: report/models.py:569 -msgid "Return order query filters" -msgstr "Rückgabe von Auftragsabfragefiltern" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" -msgstr "Snippet-Datei mit diesem Namen existiert bereits" - -#: report/models.py:648 -msgid "Snippet" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:649 +#: report/models.py:444 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "Fortschritt" + +#: report/models.py:448 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:456 +msgid "Report Template" +msgstr "" + +#: report/models.py:463 report/models.py:486 +msgid "Output File" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" +msgstr "" + +#: report/models.py:475 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 +msgid "Snippet" +msgstr "Schnipsel" + +#: report/models.py:503 msgid "Report snippet file" msgstr "Berichts-Snippet" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "Snippet-Beschreibung" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "Eine Datei mit diesem Namen existiert bereits" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "Ressource" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "Berichts-Ressource" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "Ressource-Beschreibung" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" -msgstr "Filter für standortbezogene Abfragen (kommaseparierte Liste von Schlüssel=Wert-Paaren)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "Etiketten-Vorlage auswählen" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR-Code" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-Code" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Benötigte Materialien" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "benötigt für" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "Lieferant gelöscht" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Stück-Preis" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "Zusätzliche Positionen" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "Summe" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Seriennummer" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Lagerstandorte" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "Lagerartikel Test-Bericht" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "Testergebnisse" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" -msgstr "" +msgstr "Test" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Ergebnis" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "bestanden" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "fehlgeschlagen" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "Kein Ergebnis (erforderlich)" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "Kein Ergebnis" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Verbaute Objekte" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Seriennummer" @@ -8724,7 +8687,7 @@ msgstr "Lieferant" msgid "Customer ID" msgstr "Kunden ID" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "verbaut in" @@ -8749,555 +8712,723 @@ msgstr "Überprüfung erforderlich" msgid "Delete on Deplete" msgstr "Löschen wenn leer" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "Ablaufdatum" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "Filtern nach Standorttiefe" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "Unterorte in gefilterte Ergebnisse einbeziehen" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "Übergeordneter Ort" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "Filtern nach übergeordnetem Ort" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Externer Standort" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "Teile-Baum" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "Gültigkeitsdauer vor" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "überfällig" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "Gültiges Teil muss angegeben werden" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "Der angegebene Lieferantenartikel existiert nicht" -#: stock/api.py:938 +#: stock/api.py:974 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:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "Lagerstandort Typ" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "Lagerstandorte Typen" -#: stock/models.py:90 +#: stock/models.py:86 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:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Bestand-Lagerorte" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Besitzer auswählen" -#: stock/models.py:167 +#: stock/models.py:175 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:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Extern" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "Dies ist ein externer Lagerort" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Standorttyp" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "Standortart dieses Standortes" -#: stock/models.py:254 +#: stock/models.py:262 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:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" -#: stock/models.py:670 +#: stock/models.py:687 #, 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:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:683 +#: stock/models.py:700 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:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:712 +#: stock/models.py:729 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:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Verbraucht von" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "Bauauftrag der diesen Lagerartikel verbrauchte" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:885 +#: stock/models.py:902 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:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1479 +#: stock/models.py:1504 #, 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:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "Seriennummern muss eine Liste von Ganzzahlen sein" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "Testvorlage existiert nicht" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:1870 +#: stock/models.py:1905 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:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "Test Notizen" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "Teststation" -#: stock/models.py:2458 +#: stock/models.py:2451 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:2464 +#: stock/models.py:2457 msgid "Started" msgstr "Gestartet" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "Der Zeitstempel des Teststarts" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "Fertiggestellt" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "Der Zeitstempel der Test-Beendigung" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "Testvorlage für dieses Ergebnis" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "Vorlagen-ID oder Testname muss angegeben werden" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "Die Test-Endzeit kann nicht früher als die Startzeit des Tests sein" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "Seriennummer ist zu lang" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Packungsgröße beim Hinzufügen verwenden: Die definierte Menge ist die Anzahl der Pakete" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, 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:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "Zu installierende Menge" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "Anzahl der zu verwendenden Artikel eingeben" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "Die zu verwendende Menge muss mindestens 1 sein" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:690 +#: stock/serializers.py:819 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:703 +#: stock/serializers.py:832 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:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "Ziel Lagerort für zurückgegebene Artikel" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "Lagerartikel auswählen, um den Status zu ändern" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "OK" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "erfordert Eingriff" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Beschädigt" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Zerstört" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Zurückgewiesen" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "In Quarantäne" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Alter Bestand-Verfolgungs-Eintrag" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lagerartikel erstellt" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Lagerartikel bearbeitet" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Seriennummer hinzugefügt" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Bestand gezählt" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Bestand manuell hinzugefügt" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Bestand manuell entfernt" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Standort geändert" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Lagerbestand aktualisiert" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "In Baugruppe installiert" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Aus Baugruppe entfernt" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Komponente installiert" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Komponente entfernt" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Vom übergeordneten Element geteilt" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Unterobjekt geteilt" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Lagerartikel zusammengeführt" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "In Variante umgewandelt" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Endprodukt erstellt" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Endprodukt fertiggestellt" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Endprodukt abgelehnt" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Durch Bauauftrag verbraucht" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Versandt gegen Verkaufsauftrag" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Gegen Bestellung empfangen" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Zurückgeschickt gegen Rücksendeauftrag" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Zum Kunden geschickt" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Rücksendung vom Kunden" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "Informationen zur Bestand-Verfolgung" @@ -9319,7 +9450,7 @@ msgstr "Testdaten" msgid "Test Report" msgstr "Test-Bericht" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "Testdaten löschen" @@ -9339,11 +9470,11 @@ msgstr "Installierte Lagerartikel" msgid "Install Stock Item" msgstr "Lagerartikel installieren" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "Alle Testergebnisse für diesen Lagerartikel löschen" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "Testergebnis hinzufügen" @@ -9366,17 +9497,17 @@ msgid "Stock adjustment actions" msgstr "Bestands-Anpassungs Aktionen" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Bestand zählen" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "Bestand hinzufügen" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "Bestand entfernen" @@ -9385,12 +9516,12 @@ msgid "Serialize stock" msgstr "Bestand serialisieren" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Bestand verschieben" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "Kunden zuweisen" @@ -9431,7 +9562,7 @@ msgid "Delete stock item" msgstr "Lagerartikel löschen" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Bauauftrag" @@ -9497,13 +9628,13 @@ msgid "Available Quantity" msgstr "Verfügbare Menge" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Kein Lagerort gesetzt" #: stock/templates/stock/item_base.html:413 msgid "Tests" -msgstr "" +msgstr "Tests" #: stock/templates/stock/item_base.html:419 msgid "This stock item has not passed all required tests" @@ -9528,40 +9659,40 @@ msgstr "Dieser Lagerartikel läuft am %(item.expiry_date)s ab" msgid "No stocktake performed" msgstr "Keine Inventur ausgeführt" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "Lagerartikel" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "Lagerstatus bearbeiten" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "Lagerartikel QR-Code" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "Barcode mit Lagerartikel verknüpfen" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "Wählen Sie eine der unten aufgeführten Teilvarianten aus." -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Warnung" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "Diese Aktion kann nicht einfach rückgängig gemacht werden" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "Lagerartikel umwandeln" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "Zurück ins Lager" @@ -9625,28 +9756,32 @@ msgstr "Standortbesitzer" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Sie sind nicht auf der Liste der Besitzer dieses Lagerorts. Der Bestands-Lagerort kann nicht verändert werden." -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "Lagerort Typ" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Neuen Lagerort anlegen" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Neuer Lagerort" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "Lagerort" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "Lagerbehälter an diesen Ort eingescannt" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "Lagerort QR-Code" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "Barcode mit Lagerort verknüpfen" @@ -9718,7 +9853,7 @@ msgstr "Die Seite ist derzeit in Wartung und sollte bald wieder verfügbar sein! #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "" +msgstr "Index" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" @@ -9872,14 +10007,14 @@ msgstr "Anmeldeeinstellungen" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Ausgehende E-Mails wurde nicht konfiguriert. Einige Anmelde- und Anmeldefunktionen funktionieren möglicherweise nicht korrekt!" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Anmelden" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" -msgstr "" +msgstr "Single Sign On" #: templates/InvenTree/settings/mixins/settings.html:5 #: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 @@ -9888,7 +10023,7 @@ msgstr "Einstellungen" #: templates/InvenTree/settings/mixins/urls.html:5 msgid "URLs" -msgstr "" +msgstr "URLs" #: templates/InvenTree/settings/mixins/urls.html:8 #, python-format @@ -9897,7 +10032,7 @@ msgstr "Die Basis-URL für dieses Plugin ist unknown on unknown" msgstr "unbekannt auf unbekanntem" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "unbekannt" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "IP Adresse" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Gerät" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Letzte Aktivität" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s vor (diese Sitzung)" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s vor" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "Möchten Sie die ausgewählte E-Mail-Adresse wirklich entfernen?" @@ -10505,7 +10640,7 @@ msgstr "Sucheinstellungen" #: templates/InvenTree/settings/user_sso.html:9 msgid "Single Sign On Accounts" -msgstr "" +msgstr "Single Sign On Konten" #: templates/InvenTree/settings/user_sso.html:16 msgid "You can sign in to your account using any of the following third party accounts:" @@ -10569,7 +10704,7 @@ msgstr "Danksagung" #: templates/about.html:79 msgid "Mobile App" -msgstr "" +msgstr "Mobile App" #: templates/about.html:84 msgid "Submit Bug Report" @@ -10607,26 +10742,26 @@ msgstr "Bestätigen" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Dieser E-Mail Bestätigungslink ist abgelaufen oder ungültig. Bitte fordern Sie eine neue E-Mail Bestätigung an." -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Einloggen" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "Kein Mitglied?" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Anmelden" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Passwort vergessen?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "oder melden Sie sich mit" @@ -10827,7 +10962,7 @@ msgid "The following parts are low on required stock" msgstr "Bei den folgenden Teilen gibt es wenige Lagerartikel" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Benötigte Menge" @@ -10841,7 +10976,7 @@ msgid "Click on the following link to view this part" msgstr "Klicken Sie auf den folgenden Link, um diesen Teil anzuzeigen" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "Mindestmenge" @@ -11006,7 +11141,7 @@ msgstr "Dadurch wird der Link zu dem zugehörigen Barcode entfernt" msgid "Unlink" msgstr "Verknüpfung aufheben" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "Lagerartikel entfernen" @@ -11196,7 +11331,7 @@ msgstr "Stückliste für Bauteile laden" msgid "Substitutes Available" msgstr "Ersatzteile verfügbar" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "Alternatives Lager erlaubt" @@ -11216,30 +11351,30 @@ msgstr "Stücklistenpreise sind vollständig" msgid "No pricing available" msgstr "Keine Preisinformation verfügbar" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "Externes Lager" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "Kein Lagerbestand verfügbar" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "Alternatives Lager und Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "Alternatives Lager einschließen" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "Ersatzteillager einschließen" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "Verbrauchsartikel" @@ -11271,7 +11406,7 @@ msgstr "Stückliste anzeigen" msgid "No BOM items found" msgstr "Keine Stücklisten-Position(en) gefunden" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "Benötigtes Teil" @@ -11440,207 +11575,207 @@ msgstr "Endprodukte entfernen" msgid "No build order allocations found" msgstr "Keine Allokationen für Bauauftrag gefunden" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "Zugewiesene Menge" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "Standort nicht angegeben" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "Endprodukte fertigstellen" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "Ausschuss" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "Endprodukte löschen" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "Endprodukt" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "Endprodukte" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "Endprodukt-Aktionen" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "Keine aktiven Endprodukte gefunden" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "Zugewiesene Positionen" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "Erforderliche Prüfungen" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "Teile auswählen" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "Sie müssen mindestens einen Teil für die Zuweisung auswählen" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "Alle Teile zugeordnet" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "Alle ausgewählten Teile wurden vollständig zugeordnet" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "Wählen Sie den Quellort aus (leer lassen, um von allen Standorten zu nehmen)" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "Lagerartikel für Bauauftrag zuweisen" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "Keine passenden Lagerstandorte" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "Keine passenden Lagerartikel" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "Automatische Lagerzuordnung" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Lagerartikel werden automatisch diesem Bauauftrag zugewiesen, entsprechend den angegebenen Richtlinien" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "Wenn ein Lagerort angegeben ist, wird der Lagerbestand nur von diesem Ort zugewiesen" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Wenn der Lagerbestand als austauschbar gilt, wird er vom ersten Standort zugewiesen, an dem er gefunden wird" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Wenn ein Ersatzlager zugelassen ist, wird dieses verwendet, wenn das Primärteil nicht vorrätig ist" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "Lagerartikel zuordnen" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "Keine Bauaufträge zur Suchanfrage" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "Auswählen" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "Bauauftrag ist überfällig" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "Fortschritt" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "Keine Benutzerinformation" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "Bestands-Zuordnung bearbeiten" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "Bestands-Zuordnung löschen" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "Zuordnung bearbeiten" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "Zuordnung entfernen" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "Bauauftragsposition" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "Bauauftragspositionen" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "Keine Bauauftragspositionen gefunden" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "Nachverfolgbares Teil" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "Menge" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "Ausreichender Bestand vorhanden" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "Verbrauchsartikel" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "Verfolgtes Objekt" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "Zuweisung von nachverfolgbaren Artikeln zu einzelnen Bauprodukten" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "Bestand bauen" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "Bestand bestellen" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "Bestand zuweisen" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "Bestands-Zuordnung löschen" @@ -11886,12 +12021,12 @@ msgid "Delete price break" msgstr "Staffelpreis löschen" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "wahr" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "falsch" @@ -11923,7 +12058,7 @@ msgstr "Neuen Filter hinzufügen" msgid "Clear all filters" msgstr "Alle Filter entfernen" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "Filter erstellen" @@ -11956,32 +12091,32 @@ msgstr "Dieses Formular offen lassen" msgid "Enter a valid number" msgstr "Gib eine gültige Nummer ein" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Fehler in Formular" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "Keine Ergebnisse gefunden" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "Suche" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "Eingabe löschen" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "Dateispalte" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "Feldname" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "Spalten auswählen" @@ -12005,51 +12140,15 @@ msgstr "Falsch" msgid "No parts required for builds" msgstr "Keine Ersatzteile für Montage erforderlich" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "Elemente auswählen" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "Keine Elemente zum Drucken ausgewählt" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "Keine Etiketten gefunden" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "Keine Berichtvorlagen für ausgewählte Bestellungen gefunden" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "ausgewählt" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "Druckoptionen" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "Etikett drucken" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "Etiketten drucken" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "Drucken" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "Etiketten-Vorlage auswählen" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "Plugin auswählen" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "Etiketten an den Drucker senden" @@ -12120,7 +12219,7 @@ msgstr "Keine Nachrichten gefunden" #: templates/js/translated/notification.js:46 #: templates/js/translated/part.js:1604 msgid "ID" -msgstr "" +msgstr "ID" #: templates/js/translated/notification.js:52 msgid "Age" @@ -12167,7 +12266,7 @@ msgid "Delete Line" msgstr "Position löschen" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "Keine Postionen gefunden" @@ -12245,47 +12344,47 @@ msgstr "Aktion für Unterkategorien" #: templates/js/translated/part.js:430 msgid "Create Part" -msgstr "" +msgstr "Teil erstellen" #: templates/js/translated/part.js:432 msgid "Create another part after this one" -msgstr "" +msgstr "Weiteres Teil nach diesem erstellen" #: templates/js/translated/part.js:433 msgid "Part created successfully" -msgstr "" +msgstr "Teil erfolgreich angelegt" #: templates/js/translated/part.js:461 msgid "Edit Part" -msgstr "" +msgstr "Teil bearbeiten" #: templates/js/translated/part.js:463 msgid "Part edited" -msgstr "" +msgstr "Teil bearbeitet" #: templates/js/translated/part.js:474 msgid "Create Part Variant" -msgstr "" +msgstr "Teil-Variante anlegen" #: templates/js/translated/part.js:531 msgid "Active Part" -msgstr "" +msgstr "Aktives Teil" #: templates/js/translated/part.js:532 msgid "Part cannot be deleted as it is currently active" -msgstr "" +msgstr "Teil kann nicht gelöscht werden, da es derzeit aktiv ist" #: templates/js/translated/part.js:546 msgid "Deleting this part cannot be reversed" -msgstr "" +msgstr "Das Löschen dieses Teils kann nicht rückgängig gemacht werden" #: templates/js/translated/part.js:548 msgid "Any stock items for this part will be deleted" -msgstr "" +msgstr "Alle Lagerartikel für dieses Teil werden gelöscht" #: templates/js/translated/part.js:549 msgid "This part will be removed from any Bills of Material" -msgstr "" +msgstr "Dieses Teil wird von allen Stücklisten entfernt" #: templates/js/translated/part.js:550 msgid "All manufacturer and supplier information for this part will be deleted" @@ -12405,19 +12504,19 @@ msgid "Delete Part Parameter Template" msgstr "Teileparametervorlage löschen" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "Keine Bestellungen gefunden" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "Diese Position ist überfällig" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "Position empfangen" @@ -12429,7 +12528,7 @@ msgstr "Teilebeziehung löschen" msgid "Delete Part Relationship" msgstr "Teilebeziehung löschen" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "Keine Teile gefunden" @@ -12445,195 +12544,195 @@ msgstr "Teilekategorie auswählen" msgid "Set category" msgstr "Kategorie wählen" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "Teil" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "Teile" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "Keine Kategorien" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Als Liste anzeigen" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "Als Raster anzeigen" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "Keine Unterkategorien gefunden" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "Als Baum anzeigen" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "Unterkategorien laden" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "Abonnierte Kategorie" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "Keine passenden Testvorlagen gefunden" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "Ergebnisse" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "Testergebnis bearbeiten" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "Testergebnis löschen" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "Dieser Test ist für ein übergeordnetes Teil definiert" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "Vorlage für Testergebnis bearbeiten" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "Vorlage für Testergebnis löschen" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "Kein Datum angegeben" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "Das angegebene Datum liegt in der Vergangenheit" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "Spekulativ" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" -msgstr "" +msgstr "Keine Zeitplanung für dieses Teil vorhanden" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" -msgstr "" +msgstr "Fehler beim Abrufen der Zeitplanungsinformationen für dieses Teil" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" -msgstr "" +msgstr "Geplante Lagermengen" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "Maximale Menge" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" -msgstr "" +msgstr "Minimaler Lagerbestand" #: templates/js/translated/plugin.js:46 msgid "No plugins found" -msgstr "" +msgstr "Keine Plugins gefunden" #: templates/js/translated/plugin.js:58 msgid "This plugin is no longer installed" -msgstr "" +msgstr "Dieses Plugin ist nicht mehr installiert" #: templates/js/translated/plugin.js:60 msgid "This plugin is active" -msgstr "" +msgstr "Dieses Plugin ist aktiv" #: templates/js/translated/plugin.js:62 msgid "This plugin is installed but not active" -msgstr "" +msgstr "Dieses Plugin ist installiert, aber nicht aktiv" #: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 msgid "Disable Plugin" -msgstr "" +msgstr "Plugin deaktivieren" #: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 msgid "Enable Plugin" -msgstr "" +msgstr "Plugin aktivieren" #: templates/js/translated/plugin.js:158 msgid "The Plugin was installed" -msgstr "" +msgstr "Das Plugin wurde installiert" #: templates/js/translated/plugin.js:177 msgid "Are you sure you want to enable this plugin?" -msgstr "" +msgstr "Soll dieses Plugin aktiviert werden?" #: templates/js/translated/plugin.js:181 msgid "Are you sure you want to disable this plugin?" -msgstr "" +msgstr "Soll dieses Plugin deaktiviert werden?" #: templates/js/translated/plugin.js:189 msgid "Enable" -msgstr "" +msgstr "Aktivieren" #: templates/js/translated/plugin.js:189 msgid "Disable" -msgstr "" +msgstr "Deaktivieren" #: templates/js/translated/plugin.js:203 msgid "Plugin updated" -msgstr "" +msgstr "Plugin aktualisiert" #: templates/js/translated/pricing.js:159 msgid "Error fetching currency data" -msgstr "" +msgstr "Fehler beim Abrufen der Währungsdaten" #: templates/js/translated/pricing.js:321 msgid "No BOM data available" -msgstr "" +msgstr "Keine Stücklisten-Daten verfügbar" #: templates/js/translated/pricing.js:463 msgid "No supplier pricing data available" -msgstr "" +msgstr "Keine Zulieferer-Preise verfügbar" #: templates/js/translated/pricing.js:572 msgid "No price break data available" -msgstr "" +msgstr "Keine Staffelpreisdaten verfügbar" #: templates/js/translated/pricing.js:755 msgid "No purchase history data available" -msgstr "" +msgstr "Keine Einkaufshistorie verfügbar" #: templates/js/translated/pricing.js:791 msgid "Purchase Price History" -msgstr "" +msgstr "Kaufpreisverlauf" #: templates/js/translated/pricing.js:894 msgid "No sales history data available" -msgstr "" +msgstr "Keine Verkaufshistorie verfügbar" #: templates/js/translated/pricing.js:916 msgid "Sale Price History" -msgstr "" +msgstr "Verkaufspreisverlauf" #: templates/js/translated/pricing.js:1005 msgid "No variant data available" -msgstr "" +msgstr "Keine Variantendaten verfügbar" #: templates/js/translated/pricing.js:1045 msgid "Variant Part" -msgstr "" +msgstr "Variantenteil" #: templates/js/translated/purchase_order.js:169 msgid "Select purchase order to duplicate" -msgstr "" +msgstr "Bestellung zum Duplizieren auswählen" #: templates/js/translated/purchase_order.js:176 msgid "Duplicate Line Items" @@ -12653,21 +12752,21 @@ msgstr "Zusätzliche Positionen der ausgewählten Bestellung duplizieren" #: templates/js/translated/purchase_order.js:206 msgid "Edit Purchase Order" -msgstr "" +msgstr "Bestellung bearbeiten" #: templates/js/translated/purchase_order.js:223 msgid "Duplication Options" -msgstr "" +msgstr "Duplizierungsoptionen" #: templates/js/translated/purchase_order.js:431 msgid "Complete Purchase Order" -msgstr "" +msgstr "Bestellung abschließen" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" -msgstr "" +msgstr "Diese Bestellung als vollständig markieren?" #: templates/js/translated/purchase_order.js:454 msgid "All line items have been received" @@ -12678,21 +12777,20 @@ msgid "This order has line items which have not been marked as received." msgstr "Diese Bestellung enthält Positionen, die nicht als empfangen markiert wurden." #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "Fertigstellen dieser Bestellung bedeutet, dass sie ihre Positionen nicht länger bearbeiten können." #: templates/js/translated/purchase_order.js:483 msgid "Cancel Purchase Order" -msgstr "" +msgstr "Bestellung stornieren" #: templates/js/translated/purchase_order.js:488 msgid "Are you sure you wish to cancel this purchase order?" -msgstr "" +msgstr "Soll die Bestellung storniert werden?" #: templates/js/translated/purchase_order.js:494 msgid "This purchase order can not be cancelled" -msgstr "" +msgstr "Diese Bestellung kann nicht storniert werden" #: templates/js/translated/purchase_order.js:515 #: templates/js/translated/return_order.js:164 @@ -12701,11 +12799,11 @@ msgstr "Nachdem diese Bestellung platziert ist, können die Positionen nicht lä #: templates/js/translated/purchase_order.js:520 msgid "Issue Purchase Order" -msgstr "" +msgstr "Bestellung aufgeben" #: templates/js/translated/purchase_order.js:612 msgid "At least one purchaseable part must be selected" -msgstr "" +msgstr "Mindestens ein kaufbares Teil muss ausgewählt werden" #: templates/js/translated/purchase_order.js:637 msgid "Quantity to order" @@ -12713,15 +12811,15 @@ msgstr "Zu bestellende Menge" #: templates/js/translated/purchase_order.js:646 msgid "New supplier part" -msgstr "" +msgstr "Neues Zuliefererteil" #: templates/js/translated/purchase_order.js:664 msgid "New purchase order" -msgstr "" +msgstr "Neue Bestellung" #: templates/js/translated/purchase_order.js:705 msgid "Add to purchase order" -msgstr "" +msgstr "Zur Bestellung hinzufügen" #: templates/js/translated/purchase_order.js:755 msgid "Merge" @@ -12729,19 +12827,19 @@ msgstr "Zusammenfügen" #: templates/js/translated/purchase_order.js:859 msgid "No matching supplier parts" -msgstr "" +msgstr "Keine passenden Lieferantenteile" #: templates/js/translated/purchase_order.js:878 msgid "No matching purchase orders" -msgstr "" +msgstr "Keine passenden Bestellungen" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "Positionen auswählen" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "Mindestens eine Position muss ausgewählt werden" @@ -12755,42 +12853,42 @@ msgstr "Zu erhaltende Menge" #: templates/js/translated/purchase_order.js:1191 msgid "Stock Status" -msgstr "" +msgstr "Bestandsstatus" #: templates/js/translated/purchase_order.js:1205 msgid "Add barcode" -msgstr "" +msgstr "Barcode hinzufügen" #: templates/js/translated/purchase_order.js:1206 msgid "Remove barcode" -msgstr "" +msgstr "Barcode entfernen" #: templates/js/translated/purchase_order.js:1209 msgid "Specify location" -msgstr "" +msgstr "Lagerort angeben" #: templates/js/translated/purchase_order.js:1217 msgid "Add batch code" -msgstr "" +msgstr "Losnummer hinzufügen" #: templates/js/translated/purchase_order.js:1228 msgid "Add serial numbers" -msgstr "" +msgstr "Seriennummern hinzufügen" #: templates/js/translated/purchase_order.js:1280 msgid "Serials" -msgstr "" +msgstr "Seriennummern" #: templates/js/translated/purchase_order.js:1305 msgid "Order Code" -msgstr "" +msgstr "Bestellnummer" #: templates/js/translated/purchase_order.js:1307 msgid "Quantity to Receive" msgstr "Zu erhaltende Menge" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "Empfang der Artikel bestätigen" @@ -12810,133 +12908,118 @@ msgstr "Scanne den Barcode am erhaltenen Artikel (darf nicht mit einem existiere msgid "Invalid barcode data" msgstr "Ungültige Barcode-Daten" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "Bestellung ist überfällig" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "Alle ausgewählten Positionen werden gelöscht" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "Ausgewählte Positionen löschen?" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "Position duplizieren" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "Position bearbeiten" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "Position löschen" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "Position duplizieren" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "Position bearbeiten" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "Position löschen" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 #: templates/js/translated/sales_order.js:86 msgid "Add Customer" -msgstr "" +msgstr "Kunden hinzufügen" #: templates/js/translated/return_order.js:134 msgid "Create Return Order" -msgstr "" +msgstr "Rücksendeauftrag erstellen" #: templates/js/translated/return_order.js:149 msgid "Edit Return Order" -msgstr "" +msgstr "Rücksendeauftrag bearbeiten" #: templates/js/translated/return_order.js:169 msgid "Issue Return Order" -msgstr "" +msgstr "Neuer Rücksendeauftrag" #: templates/js/translated/return_order.js:186 msgid "Are you sure you wish to cancel this Return Order?" -msgstr "" +msgstr "Soll der Rücksendeauftrag storniert werden?" #: templates/js/translated/return_order.js:193 msgid "Cancel Return Order" -msgstr "" +msgstr "Rücksendeauftrag stornieren" #: templates/js/translated/return_order.js:218 msgid "Complete Return Order" -msgstr "" +msgstr "Rücksendeauftrag abschließen" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" -msgstr "" +msgstr "Kein Rücksendeauftrag gefunden" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" -msgstr "" +msgstr "Ungültiger Kunde" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" -msgstr "" +msgstr "Rücksendeauftragspositionen erhalten" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "Keine passenden Positionen gefunden" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" -msgstr "" +msgstr "Artikel als empfangen markieren" #: templates/js/translated/sales_order.js:161 msgid "Create Sales Order" @@ -12948,176 +13031,192 @@ msgstr "Auftrag bearbeiten" #: templates/js/translated/sales_order.js:291 msgid "No stock items have been allocated to this shipment" -msgstr "" +msgstr "Dieser Sendung wurden keine Lagerartikel zugewiesen" #: templates/js/translated/sales_order.js:296 msgid "The following stock items will be shipped" -msgstr "" +msgstr "Die folgenden Lagerartikel werden verschickt" #: templates/js/translated/sales_order.js:336 msgid "Complete Shipment" -msgstr "" +msgstr "Lieferung fertigstellen" #: templates/js/translated/sales_order.js:360 msgid "Confirm Shipment" -msgstr "" +msgstr "Lieferung bestätigen" #: templates/js/translated/sales_order.js:416 msgid "No pending shipments found" -msgstr "" +msgstr "Keine ausstehenden Sendungen gefunden" #: templates/js/translated/sales_order.js:420 msgid "No stock items have been allocated to pending shipments" -msgstr "" +msgstr "Keine Lagerartikel wurden offenen Sendungen zugewiesen" #: templates/js/translated/sales_order.js:430 msgid "Complete Shipments" -msgstr "" +msgstr "Lieferung fertigstellen" #: templates/js/translated/sales_order.js:452 msgid "Skip" -msgstr "" +msgstr "Überspringen" + +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "Auftrag versenden" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "Bestellung versenden?" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "Auftrag kann nicht abgeschlossen werden, da unvollständige Sendungen vorhanden sind" #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "Dieser Auftrag enthält Positionen, die noch nicht abgeschlossen sind." -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "Versenden dieses Auftrags bedeutet, dass der Auftrag und seine Positionen nicht mehr bearbeitbar sind." + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "Diesen Auftrag aufgeben?" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "Auftrag aufgeben" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "Auftrag stornieren" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." -msgstr "" +msgstr "Stornieren dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist." -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" -msgstr "" +msgstr "Neue Lieferung erstellen" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "Keine Aufträge gefunden" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" -msgstr "" +msgstr "Lieferung bearbeiten" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" -msgstr "" +msgstr "Lieferung fertigstellen" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" -msgstr "" +msgstr "Lieferung löschen" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" -msgstr "" +msgstr "Lieferung bearbeiten" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" -msgstr "" +msgstr "Lieferung löschen" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" -msgstr "" +msgstr "Keine passende Lieferung gefunden" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" -msgstr "" +msgstr "Sendungsreferenz" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" -msgstr "" +msgstr "Nicht versandt" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" -msgstr "" +msgstr "Nachverfolgen" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" -msgstr "" +msgstr "Rechnung" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" -msgstr "" +msgstr "Lieferung hinzufügen" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" -msgstr "" +msgstr "Bestandszuordnung bestätigen" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "Lagerartikel Auftrag zuweisen" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "Keine Allokationen für Auftrag gefunden" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" -msgstr "" +msgstr "Bestandszuordnung bearbeiten" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" -msgstr "" +msgstr "Löschvorgang bestätigen" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" -msgstr "" +msgstr "Bestandszuordnung löschen" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" -msgstr "" +msgstr "An den Kunden versandt" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" -msgstr "" +msgstr "Lagerort nicht angegeben" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" -msgstr "" +msgstr "Seriennummern zuweisen" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" -msgstr "" +msgstr "Bestand kaufen" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" -msgstr "" +msgstr "Preis berechnen" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" -msgstr "" +msgstr "Kann nicht gelöscht werden, da Artikel versandt wurden" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" -msgstr "" +msgstr "Kann nicht gelöscht werden, da Artikel zugewiesen sind" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" -msgstr "" +msgstr "Seriennummern zuweisen" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" -msgstr "" +msgstr "Stückpreis aktualisieren" #: templates/js/translated/search.js:270 msgid "No results" -msgstr "" +msgstr "Keine Ergebnisse" #: templates/js/translated/search.js:292 templates/search.html:25 msgid "Enter search query" @@ -13125,517 +13224,517 @@ msgstr "Suchbegriff eingeben" #: templates/js/translated/search.js:342 msgid "result" -msgstr "" +msgstr "ergebnis" #: templates/js/translated/search.js:352 msgid "Minimize results" -msgstr "" +msgstr "Ergebnisse minimieren" #: templates/js/translated/search.js:355 msgid "Remove results" -msgstr "" +msgstr "Ergebnisse entfernen" #: templates/js/translated/stock.js:98 msgid "Serialize Stock Item" -msgstr "" +msgstr "Lagerartikel serialisieren" #: templates/js/translated/stock.js:129 msgid "Confirm Stock Serialization" -msgstr "" +msgstr "Lager-Serialisierung bestätigen" #: templates/js/translated/stock.js:139 msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" -msgstr "" +msgstr "Standardsymbol für alle Orte, die kein Symbol haben (optional) - Erkunden Sie alle verfügbaren Symbole auf" #: templates/js/translated/stock.js:152 msgid "Parent stock location" -msgstr "" +msgstr "Übergeordneter Lagerort" #: templates/js/translated/stock.js:166 msgid "Add Location type" -msgstr "" +msgstr "Lagerorttyp hinzufügen" #: templates/js/translated/stock.js:202 msgid "Edit Stock Location" -msgstr "" +msgstr "Lagerort bearbeiten" #: templates/js/translated/stock.js:217 msgid "New Stock Location" -msgstr "" +msgstr "Lagerort hinzufügen" #: templates/js/translated/stock.js:219 msgid "Create another location after this one" -msgstr "" +msgstr "Weiteren Lagerort nach diesem erstellen" #: templates/js/translated/stock.js:220 msgid "Stock location created" -msgstr "" +msgstr "Lagerort erstellt" #: templates/js/translated/stock.js:234 msgid "Are you sure you want to delete this stock location?" -msgstr "" +msgstr "Soll dieser Lagerort gelöscht werden?" #: templates/js/translated/stock.js:241 msgid "Move to parent stock location" -msgstr "" +msgstr "Zum übergeordneten Lagerort verschieben" #: templates/js/translated/stock.js:250 msgid "Delete Stock Location" -msgstr "" +msgstr "Lagerort löschen" #: templates/js/translated/stock.js:254 msgid "Action for stock items in this stock location" -msgstr "" +msgstr "Aktion für Lagerartikel in diesem Lagerort" #: templates/js/translated/stock.js:259 msgid "Action for sub-locations" -msgstr "" +msgstr "Aktion für Unter-Lagerorte" #: templates/js/translated/stock.js:313 msgid "This part cannot be serialized" -msgstr "" +msgstr "Dieser Teil kann nicht serialisiert werden" #: templates/js/translated/stock.js:349 msgid "Add given quantity as packs instead of individual items" -msgstr "" +msgstr "Angegebene Menge als Packungen anstatt einzelner Artikel hinzufügen" #: templates/js/translated/stock.js:362 msgid "Enter initial quantity for this stock item" -msgstr "" +msgstr "Ausgangsmenge für diesen Lagerartikel eingeben" #: templates/js/translated/stock.js:368 msgid "Enter serial numbers for new stock (or leave blank)" -msgstr "" +msgstr "Seriennummern für neue Lagerartikel eingeben (oder leer lassen)" #: templates/js/translated/stock.js:439 msgid "Stock item duplicated" -msgstr "" +msgstr "Lagerartikel dupliziert" #: templates/js/translated/stock.js:459 msgid "Duplicate Stock Item" -msgstr "" +msgstr "Lagerartikel duplizieren" #: templates/js/translated/stock.js:475 msgid "Are you sure you want to delete this stock item?" -msgstr "" +msgstr "Soll dieser Lagerartikel gelöscht werden?" #: templates/js/translated/stock.js:480 msgid "Delete Stock Item" -msgstr "" +msgstr "Lagerartikel löschen" #: templates/js/translated/stock.js:501 msgid "Edit Stock Item" -msgstr "" +msgstr "Lagerartikel bearbeiten" #: templates/js/translated/stock.js:543 msgid "Create another item after this one" -msgstr "" +msgstr "Weiteres Teil nach diesem erstellen" #: templates/js/translated/stock.js:555 msgid "Created new stock item" -msgstr "" +msgstr "Neuen Lagerartikel erstellen" #: templates/js/translated/stock.js:568 msgid "Created multiple stock items" -msgstr "" +msgstr "Mehrere Lagerartikel wurden erstellt" #: templates/js/translated/stock.js:593 msgid "Find Serial Number" -msgstr "" +msgstr "Seriennummer finden" #: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" -msgstr "" +msgstr "Seriennummer eingeben" #: templates/js/translated/stock.js:614 msgid "Enter a serial number" -msgstr "" +msgstr "Eine Seriennummer eingeben" #: templates/js/translated/stock.js:634 msgid "No matching serial number" -msgstr "" +msgstr "Keine passende Seriennummer" #: templates/js/translated/stock.js:643 msgid "More than one matching result found" -msgstr "" +msgstr "Mehr als ein übereinstimmendes Ergebnis gefunden" #: templates/js/translated/stock.js:751 msgid "Confirm stock assignment" -msgstr "" +msgstr "Bestand Zuweisung bestätigen" #: templates/js/translated/stock.js:752 msgid "Assign Stock to Customer" -msgstr "" +msgstr "Lagerbestand einem Kunden zuweisen" #: templates/js/translated/stock.js:829 msgid "Warning: Merge operation cannot be reversed" -msgstr "" +msgstr "Achtung: Das Zusammenführen kann nicht rückgängig gemacht werden" #: templates/js/translated/stock.js:830 msgid "Some information will be lost when merging stock items" -msgstr "" +msgstr "Einige Informationen gehen verloren, wenn Artikel zusammengeführt werden" #: templates/js/translated/stock.js:832 msgid "Stock transaction history will be deleted for merged items" -msgstr "" +msgstr "Lagerartikelverlauf wird für zusammengeführte Lagerartikel gelöscht" #: templates/js/translated/stock.js:833 msgid "Supplier part information will be deleted for merged items" -msgstr "" +msgstr "Lieferantenteil-Informationen werden für zusammengeführte Artikel gelöscht" #: templates/js/translated/stock.js:928 msgid "Confirm stock item merge" -msgstr "" +msgstr "Bestandszusammenführung bestätigen" #: templates/js/translated/stock.js:929 msgid "Merge Stock Items" -msgstr "" +msgstr "Lagerartikel zusammenführen" #: templates/js/translated/stock.js:1024 msgid "Transfer Stock" -msgstr "" +msgstr "Bestand verschieben" #: templates/js/translated/stock.js:1025 msgid "Move" -msgstr "" +msgstr "Verschieben" #: templates/js/translated/stock.js:1031 msgid "Count Stock" -msgstr "" +msgstr "Bestand zählen" #: templates/js/translated/stock.js:1032 msgid "Count" -msgstr "" +msgstr "Zählen" #: templates/js/translated/stock.js:1036 msgid "Remove Stock" -msgstr "" +msgstr "Bestand entfernen" #: templates/js/translated/stock.js:1037 msgid "Take" -msgstr "" +msgstr "Entnehmen" #: templates/js/translated/stock.js:1041 msgid "Add Stock" -msgstr "" +msgstr "Bestand hinzufügen" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Hinzufügen" #: templates/js/translated/stock.js:1046 msgid "Delete Stock" -msgstr "" +msgstr "Bestand löschen" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" -msgstr "" +msgstr "Menge von serialisiertem Bestand kann nicht bearbeitet werden" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" -msgstr "" +msgstr "Bestandsanzahl angeben" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" -msgstr "" +msgstr "Lagerartikel auswählen" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" -msgstr "" +msgstr "Wähle mindestens einen verfügbaren Lagerartikel aus" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" -msgstr "" +msgstr "Bestandsanpassung bestätigen" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" -msgstr "" +msgstr "ERFOLGREICH" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" -msgstr "" +msgstr "FEHLGESCHLAGEN" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" -msgstr "" - -#: templates/js/translated/stock.js:1447 -msgid "Pass test" -msgstr "" +msgstr "KEIN ERGEBNIS" #: templates/js/translated/stock.js:1450 +msgid "Pass test" +msgstr "Test bestanden" + +#: templates/js/translated/stock.js:1453 msgid "Add test result" -msgstr "" +msgstr "Testergebnis hinzufügen" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" -msgstr "" +msgstr "Keine Testergebnisse gefunden" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" -msgstr "" +msgstr "Testdatum" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" -msgstr "" +msgstr "Test gestartet" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" -msgstr "" +msgstr "Test beendet" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" -msgstr "" +msgstr "Testergebnis bearbeiten" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" -msgstr "" +msgstr "Testergebnis löschen" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" -msgstr "" +msgstr "In Produktion" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" -msgstr "" +msgstr "In Lagerartikel installiert" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" -msgstr "" +msgstr "Auftrag zugewiesen" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" -msgstr "" +msgstr "Kein Lagerort gesetzt" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" -msgstr "" +msgstr "Bestandsstatus ändern" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" -msgstr "" +msgstr "Bestand zusammenführen" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" -msgstr "" +msgstr "Bestand löschen" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" -msgstr "" +msgstr "Lagerartikel" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" -msgstr "" +msgstr "Zu Lagerort einscannen" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "Lager-Aktionen" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" -msgstr "" +msgstr "Installierte Artikel laden" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" -msgstr "" +msgstr "Lagerartikel wird produziert" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" -msgstr "" +msgstr "Lagerartikel wurde Auftrag zugewiesen" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" -msgstr "" +msgstr "Lagerartikel wurde Kunden zugewiesen" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" -msgstr "" +msgstr "Serialisierter Lagerartikel wurde zugewiesen" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" -msgstr "" +msgstr "Lagerartikel wurde vollständig zugewiesen" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" -msgstr "" +msgstr "Lagerartikel wurde teilweise zugewiesen" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" -msgstr "" +msgstr "Lagerartikel in anderem Artikel verbaut" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" -msgstr "" +msgstr "Lagerbestand wurde durch einen Bauauftrag verbraucht" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" -msgstr "" +msgstr "Lagerartikel ist abgelaufen" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" -msgstr "" +msgstr "Lagerartikel läuft demnächst ab" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" -msgstr "" +msgstr "Lagerartikel wurde zurückgewiesen" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" -msgstr "" +msgstr "Lagerartikel ist verloren" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" -msgstr "" +msgstr "Lagerartikel ist zerstört" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" -msgstr "" +msgstr "Aufgebraucht" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" -msgstr "" +msgstr "Zuliefererteil nicht angegeben" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" -msgstr "" +msgstr "Bestandswert" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" -msgstr "" +msgstr "Keine zur Anfrage passenden Lagerartikel gefunden" #: templates/js/translated/stock.js:2573 msgid "stock locations" -msgstr "" +msgstr "Lagerorte" #: templates/js/translated/stock.js:2728 msgid "Load Sublocations" -msgstr "" +msgstr "Untergeordnete Lagerorte laden" #: templates/js/translated/stock.js:2846 msgid "Details" -msgstr "" +msgstr "Details" #: templates/js/translated/stock.js:2850 msgid "No changes" -msgstr "" +msgstr "Keine Änderungen" #: templates/js/translated/stock.js:2862 msgid "Part information unavailable" -msgstr "" +msgstr "Teileinformationen nicht verfügbar" #: templates/js/translated/stock.js:2884 msgid "Location no longer exists" -msgstr "" +msgstr "Lagerort existiert nicht mehr" #: templates/js/translated/stock.js:2901 msgid "Build order no longer exists" -msgstr "" +msgstr "Bauauftrag existiert nicht mehr" #: templates/js/translated/stock.js:2916 msgid "Purchase order no longer exists" -msgstr "" +msgstr "Bestellung existiert nicht mehr" #: templates/js/translated/stock.js:2933 msgid "Sales Order no longer exists" -msgstr "" +msgstr "Auftrag existiert nicht mehr" #: templates/js/translated/stock.js:2950 msgid "Return Order no longer exists" -msgstr "" +msgstr "Rücksendebestellung existiert nicht mehr" #: templates/js/translated/stock.js:2969 msgid "Customer no longer exists" -msgstr "" +msgstr "Kunde existiert nicht mehr" #: templates/js/translated/stock.js:2987 msgid "Stock item no longer exists" -msgstr "" +msgstr "Lagerartikel existiert nicht mehr" #: templates/js/translated/stock.js:3005 msgid "Added" -msgstr "" +msgstr "Hinzugefügt" #: templates/js/translated/stock.js:3013 msgid "Removed" -msgstr "" +msgstr "Entfernt" #: templates/js/translated/stock.js:3085 msgid "No installed items" -msgstr "" +msgstr "Keine installierten Artikel" #: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 msgid "Uninstall Stock Item" -msgstr "" +msgstr "Lagerartikel deinstallieren" #: templates/js/translated/stock.js:3197 msgid "Select stock item to uninstall" -msgstr "" +msgstr "Zu deinstallierende Lagerartikel auswählen" #: templates/js/translated/stock.js:3218 msgid "Install another stock item into this item" -msgstr "" +msgstr "Einen anderen Lagerartikel in dieses Teil installieren" #: templates/js/translated/stock.js:3219 msgid "Stock items can only be installed if they meet the following criteria" -msgstr "" +msgstr "Lagerartikel können nur installiert werden wenn folgende Kriterien erfüllt werden" #: templates/js/translated/stock.js:3221 msgid "The Stock Item links to a Part which is the BOM for this Stock Item" -msgstr "" +msgstr "Der Lagerartikel ist mit einem Teil verknüpft das in der Stückliste für diesen Lagerartikel ist" #: templates/js/translated/stock.js:3222 msgid "The Stock Item is currently available in stock" -msgstr "" +msgstr "Dieser Lagerartikel ist aktuell vorhanden" #: templates/js/translated/stock.js:3223 msgid "The Stock Item is not already installed in another item" -msgstr "" +msgstr "Der Lagerbestand ist nicht bereits in einem anderen Bestand installiert" #: templates/js/translated/stock.js:3224 msgid "The Stock Item is tracked by either a batch code or serial number" -msgstr "" +msgstr "Der Lagerbestand wird entweder mit einem Batch-Code oder mit Seriennummer verfolgt" #: templates/js/translated/stock.js:3237 msgid "Select part to install" -msgstr "" +msgstr "Teil zur Installation auswählen" #: templates/js/translated/stock.js:3300 msgid "Select one or more stock items" -msgstr "" +msgstr "Wählen Sie einen oder mehrere Bestandteile aus" #: templates/js/translated/stock.js:3313 msgid "Selected stock items" -msgstr "" +msgstr "Lagerartikel auswählen" #: templates/js/translated/stock.js:3317 msgid "Change Stock Status" -msgstr "" +msgstr "Bestandsstatus ändern" #: templates/js/translated/table_filters.js:74 msgid "Has project code" -msgstr "" +msgstr "Hat Projektcode" #: templates/js/translated/table_filters.js:89 #: templates/js/translated/table_filters.js:605 #: templates/js/translated/table_filters.js:617 #: templates/js/translated/table_filters.js:658 msgid "Order status" -msgstr "" +msgstr "Bestellstatus" #: templates/js/translated/table_filters.js:94 #: templates/js/translated/table_filters.js:622 #: templates/js/translated/table_filters.js:648 #: templates/js/translated/table_filters.js:663 msgid "Outstanding" -msgstr "" +msgstr "Ausstehend" #: templates/js/translated/table_filters.js:102 #: templates/js/translated/table_filters.js:528 #: templates/js/translated/table_filters.js:630 #: templates/js/translated/table_filters.js:671 msgid "Assigned to me" -msgstr "" +msgstr "Mir zugewiesen" #: templates/js/translated/table_filters.js:158 msgid "Trackable Part" @@ -13643,11 +13742,11 @@ msgstr "Nachverfolgbares Teil" #: templates/js/translated/table_filters.js:162 msgid "Assembled Part" -msgstr "" +msgstr "Baugruppe" #: templates/js/translated/table_filters.js:166 msgid "Has Available Stock" -msgstr "" +msgstr "Hat verfügbaren Bestand" #: templates/js/translated/table_filters.js:182 msgid "Allow Variant Stock" @@ -13656,108 +13755,108 @@ msgstr "Erlaube alternatives Lager" #: templates/js/translated/table_filters.js:234 #: templates/js/translated/table_filters.js:345 msgid "Include sublocations" -msgstr "" +msgstr "Unter-Lagerorte einschließen" #: templates/js/translated/table_filters.js:235 msgid "Include locations" -msgstr "" +msgstr "Lagerorte einschließen" #: templates/js/translated/table_filters.js:267 msgid "Has location type" -msgstr "" +msgstr "Hat Lagerorttyp" #: templates/js/translated/table_filters.js:278 #: templates/js/translated/table_filters.js:279 #: templates/js/translated/table_filters.js:711 msgid "Include subcategories" -msgstr "" +msgstr "Unterkategorien einschließen" #: templates/js/translated/table_filters.js:287 #: templates/js/translated/table_filters.js:759 msgid "Subscribed" -msgstr "" +msgstr "Abonniert" #: templates/js/translated/table_filters.js:298 #: templates/js/translated/table_filters.js:380 msgid "Is Serialized" -msgstr "" +msgstr "Hat Seriennummer" #: templates/js/translated/table_filters.js:301 #: templates/js/translated/table_filters.js:387 msgid "Serial number GTE" -msgstr "" +msgstr "Seriennummer >=" #: templates/js/translated/table_filters.js:302 #: templates/js/translated/table_filters.js:388 msgid "Serial number greater than or equal to" -msgstr "" +msgstr "Seriennummer größer oder gleich" #: templates/js/translated/table_filters.js:305 #: templates/js/translated/table_filters.js:391 msgid "Serial number LTE" -msgstr "" +msgstr "Seriennummer <=" #: templates/js/translated/table_filters.js:306 #: templates/js/translated/table_filters.js:392 msgid "Serial number less than or equal to" -msgstr "" +msgstr "Seriennummern kleiner oder gleich" #: templates/js/translated/table_filters.js:309 #: templates/js/translated/table_filters.js:310 #: templates/js/translated/table_filters.js:383 #: templates/js/translated/table_filters.js:384 msgid "Serial number" -msgstr "" +msgstr "Seriennummer" #: templates/js/translated/table_filters.js:314 #: templates/js/translated/table_filters.js:405 msgid "Batch code" -msgstr "" +msgstr "Losnummer" #: templates/js/translated/table_filters.js:325 #: templates/js/translated/table_filters.js:700 msgid "Active parts" -msgstr "" +msgstr "Aktive Teile" #: templates/js/translated/table_filters.js:326 msgid "Show stock for active parts" -msgstr "" +msgstr "Bestand aktiver Teile anzeigen" #: templates/js/translated/table_filters.js:331 msgid "Part is an assembly" -msgstr "" +msgstr "Teil ist eine Baugruppe" #: templates/js/translated/table_filters.js:335 msgid "Is allocated" -msgstr "" +msgstr "Ist zugeordnet" #: templates/js/translated/table_filters.js:336 msgid "Item has been allocated" -msgstr "" +msgstr "Teil wurde zugeordnet" #: templates/js/translated/table_filters.js:341 msgid "Stock is available for use" -msgstr "" +msgstr "Lagerartikel ist zur Verwendung verfügbar" #: templates/js/translated/table_filters.js:346 msgid "Include stock in sublocations" -msgstr "" +msgstr "Bestand in Unter-Lagerorten einschließen" #: templates/js/translated/table_filters.js:351 msgid "Show stock items which are depleted" -msgstr "" +msgstr "Zeige aufgebrauchte Lagerartikel" #: templates/js/translated/table_filters.js:356 msgid "Show items which are in stock" -msgstr "" +msgstr "Zeige Teile welche im Lager sind" #: templates/js/translated/table_filters.js:361 msgid "Show items which are in production" -msgstr "" +msgstr "Zeige Teile welche in Produktion sind" #: templates/js/translated/table_filters.js:365 msgid "Include Variants" -msgstr "" +msgstr "Varianten einschließen" #: templates/js/translated/table_filters.js:366 msgid "Include stock items for variant parts" @@ -13765,181 +13864,181 @@ msgstr "Lagerartikel für Teile-Varianten einschließen" #: templates/js/translated/table_filters.js:371 msgid "Show stock items which are installed in another item" -msgstr "" +msgstr "Zeige Bestand, welcher in einem anderen Teil verbaut ist" #: templates/js/translated/table_filters.js:376 msgid "Show items which have been assigned to a customer" -msgstr "" +msgstr "Zeige Bestand, welcher Kunden zugeordnet ist" #: templates/js/translated/table_filters.js:396 #: templates/js/translated/table_filters.js:397 msgid "Stock status" -msgstr "" +msgstr "Bestandsstatus" #: templates/js/translated/table_filters.js:400 msgid "Has batch code" -msgstr "" +msgstr "Hat Batch-Code" #: templates/js/translated/table_filters.js:409 msgid "Stock item is tracked by either batch code or serial number" -msgstr "" +msgstr "Lagerbestand wird entweder per Batch-Code oder Seriennummer verfolgt" #: templates/js/translated/table_filters.js:414 msgid "Has purchase price" -msgstr "" +msgstr "Hat Einkaufspreis" #: templates/js/translated/table_filters.js:415 msgid "Show stock items which have a purchase price set" -msgstr "" +msgstr "Zeige Bestand, für welchen ein Einkaufspreis verfügbar ist" #: templates/js/translated/table_filters.js:419 msgid "Expiry Date before" -msgstr "" +msgstr "Ablaufdatum vor" #: templates/js/translated/table_filters.js:423 msgid "Expiry Date after" -msgstr "" +msgstr "Ablaufdatum nach" #: templates/js/translated/table_filters.js:436 msgid "Show stock items which have expired" -msgstr "" +msgstr "Zeige abgelaufene Lagerartikel" #: templates/js/translated/table_filters.js:442 msgid "Show stock which is close to expiring" -msgstr "" +msgstr "Zeige Bestand, der bald abläuft" #: templates/js/translated/table_filters.js:456 msgid "Test Passed" -msgstr "" +msgstr "Test bestanden" #: templates/js/translated/table_filters.js:460 msgid "Include Installed Items" -msgstr "" +msgstr "Installierte Teile einschließen" #: templates/js/translated/table_filters.js:515 msgid "Build status" -msgstr "" +msgstr "Bauauftrags Status" #: templates/js/translated/table_filters.js:712 msgid "Include parts in subcategories" -msgstr "" +msgstr "Teile in Unterkategorien einschließen" #: templates/js/translated/table_filters.js:717 msgid "Show active parts" -msgstr "" +msgstr "Aktive Teile anzeigen" #: templates/js/translated/table_filters.js:725 msgid "Available stock" -msgstr "" +msgstr "Verfügbarer Lagerbestand" #: templates/js/translated/table_filters.js:733 #: templates/js/translated/table_filters.js:833 msgid "Has Units" -msgstr "" +msgstr "Hat Einheiten" #: templates/js/translated/table_filters.js:734 msgid "Part has defined units" -msgstr "" +msgstr "Teil hat definierte Einheiten" #: templates/js/translated/table_filters.js:738 msgid "Has IPN" -msgstr "" +msgstr "Hat IPN" #: templates/js/translated/table_filters.js:739 msgid "Part has internal part number" -msgstr "" +msgstr "Teil hat Interne Teilenummer" #: templates/js/translated/table_filters.js:743 msgid "In stock" -msgstr "" +msgstr "Auf Lager" #: templates/js/translated/table_filters.js:751 msgid "Purchasable" -msgstr "" +msgstr "Kaufbar" #: templates/js/translated/table_filters.js:763 msgid "Has stocktake entries" -msgstr "" +msgstr "Hat Inventureinträge" #: templates/js/translated/table_filters.js:829 msgid "Has Choices" -msgstr "" +msgstr "Hat Auswahlen" #: templates/js/translated/tables.js:92 msgid "Display calendar view" -msgstr "" +msgstr "Kalenderansicht anzeigen" #: templates/js/translated/tables.js:102 msgid "Display list view" -msgstr "" +msgstr "Listenansicht anzeigen" #: templates/js/translated/tables.js:112 msgid "Display tree view" -msgstr "" +msgstr "Baumansicht anzeigen" #: templates/js/translated/tables.js:130 msgid "Expand all rows" -msgstr "" +msgstr "Alle Zeilen ausklappen" #: templates/js/translated/tables.js:136 msgid "Collapse all rows" -msgstr "" +msgstr "Alle Zeilen einklappen" #: templates/js/translated/tables.js:186 msgid "Export Table Data" -msgstr "" +msgstr "Tabellendaten exportieren" #: templates/js/translated/tables.js:190 msgid "Select File Format" -msgstr "" +msgstr "Dateiformat wählen" #: templates/js/translated/tables.js:529 msgid "Loading data" -msgstr "" +msgstr "Lade Daten" #: templates/js/translated/tables.js:532 msgid "rows per page" -msgstr "" +msgstr "Zeilen pro Seite" #: templates/js/translated/tables.js:537 msgid "Showing all rows" -msgstr "" +msgstr "Alle Zeilen anzeigen" #: templates/js/translated/tables.js:539 msgid "Showing" -msgstr "" +msgstr "Zeige" #: templates/js/translated/tables.js:539 msgid "to" -msgstr "" +msgstr "bis" #: templates/js/translated/tables.js:539 msgid "of" -msgstr "" +msgstr "von" #: templates/js/translated/tables.js:539 msgid "rows" -msgstr "" +msgstr "Zeilen" #: templates/js/translated/tables.js:546 msgid "No matching results" -msgstr "" +msgstr "Keine passenden Ergebnisse gefunden" #: templates/js/translated/tables.js:549 msgid "Hide/Show pagination" -msgstr "" +msgstr "Seitennavigation verstecken/anzeigen" #: templates/js/translated/tables.js:555 msgid "Toggle" -msgstr "" +msgstr "Umschalten" #: templates/js/translated/tables.js:558 msgid "Columns" -msgstr "" +msgstr "Spalten" #: templates/js/translated/tables.js:561 msgid "All" -msgstr "" +msgstr "Alle" #: templates/navbar.html:45 msgid "Buy" @@ -13959,7 +14058,7 @@ msgstr "Neue Benachrichtigungen" #: templates/navbar.html:144 users/models.py:201 msgid "Admin" -msgstr "" +msgstr "Admin" #: templates/navbar.html:148 msgid "Logout" @@ -13973,6 +14072,22 @@ msgstr "Speichern" msgid "Show all notifications and history" msgstr "Zeige alle Benachrichtigungen und Verlauf" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "Plattform UI - die neue Oberfläche für InvenTree - bietet modernere Administrationsmöglichkeiten." + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "Plattform UI - die neue Benutzeroberfläche für InvenTree - ist bereit um getestet zu werden." + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "Jetzt ausprobieren" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "hier" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR Daten nicht angegeben" @@ -14039,28 +14154,28 @@ msgstr "Weiter" #: templates/socialaccount/login.html:29 msgid "Invalid SSO Provider" -msgstr "" +msgstr "Ungültiger SSO-Anbieter" #: templates/socialaccount/login.html:31 msgid "The selected SSO provider is invalid, or has not been correctly configured" -msgstr "" +msgstr "Der ausgewählte SSO-Anbieter ist ungültig oder wurde nicht korrekt konfiguriert" #: templates/socialaccount/signup.html:11 #, python-format msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "" +msgstr "Sie sind dabei, Ihr %(provider_name)s Konto zu verwenden, um sich bei %(site_name)s anzumelden." #: templates/socialaccount/signup.html:13 msgid "As a final step, please complete the following form" -msgstr "" +msgstr "Bitte füllen Sie zum Abschluss folgendes Formular aus" #: templates/socialaccount/snippets/provider_list.html:26 msgid "Provider has not been configured" -msgstr "" +msgstr "Anbieter wurde nicht konfiguriert" #: templates/socialaccount/snippets/provider_list.html:35 msgid "No SSO providers have been configured" -msgstr "" +msgstr "Es wurden keine SSO-Anbieter konfiguriert" #: templates/stats.html:13 msgid "Instance Name" @@ -14140,7 +14255,7 @@ msgstr "Welche Benutzer gehören zu dieser Gruppe" #: users/admin.py:249 msgid "The following users are members of multiple groups" -msgstr "" +msgstr "Folgende Benutzer gehören zu mehreren Gruppen" #: users/admin.py:283 msgid "Personal info" @@ -14156,19 +14271,19 @@ msgstr "wichtige Daten" #: users/authentication.py:29 users/models.py:138 msgid "Token has been revoked" -msgstr "" +msgstr "Token wurde widerrufen" #: users/authentication.py:32 msgid "Token has expired" -msgstr "" +msgstr "Token ist abgelaufen" #: users/models.py:81 msgid "API Token" -msgstr "" +msgstr "API Token" #: users/models.py:82 msgid "API Tokens" -msgstr "" +msgstr "API-Tokens" #: users/models.py:118 msgid "Token Name" @@ -14180,49 +14295,48 @@ msgstr "Benutzerdefinierter Tokenname" #: users/models.py:125 msgid "Token expiry date" -msgstr "" +msgstr "Token Ablaufdatum" #: users/models.py:133 msgid "Last Seen" -msgstr "" +msgstr "Zuletzt gesehen" #: users/models.py:134 msgid "Last time the token was used" -msgstr "" +msgstr "Das letzte Mal, wo das Token verwendet wurde" #: users/models.py:138 msgid "Revoked" -msgstr "" +msgstr "Widerrufen" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Gruppe" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Ansicht" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Ändern" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" - diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index bd12cb701e..59c26e1611 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "Το API endpoint δε βρέθηκε" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" @@ -56,26 +56,26 @@ msgstr "Μπορείτε να βρείτε λεπτομέρειες σφάλμα msgid "Enter date" msgstr "Εισάγετε ημερομηνία" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Σημειώσεις" @@ -132,7 +132,7 @@ msgstr "Ο παρεχόμενος τομέας ηλεκτρονικού ταχυ msgid "Registration is disabled." msgstr "Η εγγραφή είναι απενεργοποιημένη." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Τούρκικα" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Βιετναμέζικα" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Κινέζικα (απλοποιημένα)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "Σφάλμα κατά την εκτέλεση επικύρωσης προσθέτου" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Τα μεταδεδομένα πρέπει να είναι ένα αντικείμενο dict python" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Μεταδεδομένα Πρόσθετου" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "JSON πεδίο μεταδεδομένων, για χρήση από εξωτερικά πρόσθετα" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Λανθασμένο μοτίβο" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Δώσατε λάθος μορφή κλειδιού" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Λείπει το απαραίτητο κλειδί" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Το πεδίο δεν μπορεί να είναι άδειο" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Η αναφορά πρέπει να ταιριάζει με το απαιτούμενο μοτίβο" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Το αρχείο λείπει" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Συνημμένο" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Επιλέξτε αρχείο για επισύναψη" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Σύνδεσμος" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Σχόλιο" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Σχόλιο αρχείου" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Χρήστης" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "ημερομηνία φόρτωσης" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Το όνομα αρχείου δεν μπορεί να είναι κενό" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Μη διαθέσιμη τοποθεσία συνημμένου" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Το όνομα αρχείου περιέχει μη έγκυρους χαρακτήρες '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Λείπει επέκταση ονόματος αρχείου" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Αρχείο με αυτό το όνομα υπάρχει ήδη" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Σφάλμα κατά τη μετονομασία" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Διπλότυπα ονόματα δεν μπορούν να υπάρχουν στον ίδιο γονέα" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Μη έγκυρη επιλογή" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Περιγραφή" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "γονέας" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Μονοπάτι" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Σημειώσεις Markdown (προαιρετικό)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Στοιχεία Barcode" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Δεδομένα barcode τρίτων" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Μοναδικό hash δεδομένων barcode" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Βρέθηκε υπάρχων barcode" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Σφάλμα διακομιστή" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "Διεύθυνση URL του αρχείου απομακρυσμένη msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Ο έλεγχος εργασίας στο παρασκήνιο απέτυχε" @@ -694,202 +698,6 @@ msgstr "Δεν έχει ρυθμιστεί διεύθυνση ηλεκτρονι msgid "InvenTree system health checks failed" msgstr "Ο έλεγχος συστήματος για το Inventree απέτυχε" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Σε εκκρεμότητα" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Τοποθετήθηκε" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Ολοκληρώθηκε" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Ακυρώθηκε" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Χάθηκε" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Επιστράφηκε" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Σε Εξέλιξη" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Αποστάλθηκε" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "ΟΚ" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Απαιτείται προσοχή" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Κατεστραμμένο" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Καταστράφηκε" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Απορρίφθηκε" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Σε Καραντίνα" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Καταχώρηση παλαιού αποθέματος" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Το αντικείμενο αποθεμάτων δημιουργήθηκε" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Έγινε συγχώνευση αποθεμάτων" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Εκχωρημένος σειριακός κωδικός" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Απόθεμα που μετρήθηκε" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Προστέθηκε απόθεμα χειροκίνητα" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Αφαιρέθηκε απόθεμα χειροκίνητα" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Η τοποθεσία τροποποιήθηκε" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Το απόθεμα ενημερώθηκε" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Εγκαταστάθηκε στη συναρμολόγηση" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Αφαιρέθηκε από τη συναρμολόγηση" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Εγκαταστάθηκε αντικείμενο" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Αφαιρέθηκε αντικείμενο" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Έγινε διαχωρισμός από το γονεϊκό αρχείο" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Διαχωρίστηκε θυγατρικό στοιχείο" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Έγινε συγχώνευση αποθεμάτων" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Μετατράπηκε σε παραλλαγή" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Δημιουργήθηκε η έξοδος παραγγελίας" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Η έξοδος της σειράς κατασκευής ολοκληρώθηκε" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Η εντολή κατασκευής απορρίφθηκε" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Κατανάλωση με εντολή κατασκευής" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Αποστολή έναντι Εντολής Πώλησης" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Λήφθηκε έναντι Εντολής Αγοράς" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Επιστράφηκε έναντι Εντολής Αγοράς" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Απεστάλη στον πελάτη" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Επιστράφηκε από πελάτη" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Παραγωγή" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Επιστροφή" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Επισκευή" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Αντικατάσταση" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Επιστροφή χρημάτων" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Απόρριψη" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Άγνωστη βάση δεδομένων" @@ -938,45 +746,45 @@ msgstr "Πληροφορίες συστήματος" msgid "About InvenTree" msgstr "Σχετικά με το InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Κατανεμημένο" msgid "Available" msgstr "Διαθέσιμο" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Σειρά Κατασκευής" msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Μη έγκυρη επιλογή για γονική κατασκευή" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Αναφορά" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατασκευή" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Εξάρτημα" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Επιλέξτε τμήμα για κατασκευή" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Κωδικός Παραγγελίας Πωλήσεων" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "SalesOrder στην οποία έχει διατεθεί αυτό το build" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Τοποθεσία Προορισμού" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Ποσότητα Κατασκευής" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Αριθμός αντικειμένων για κατασκευή" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Ολοκληρωμένα αντικείμενα" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Κατάσταση Κατασκευής" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Ημερομηνία ολοκλήρωσης στόχου" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Εκδόθηκε από" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Υπεύθυνος" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Προτεραιότητα Κατασκευής" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Κωδικός Έργου" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Τοποθεσία" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Κατάσταση" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" -msgstr "Αφαίρεση Καταχωρημένου Αποθέματος" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Αφαίρεσε το απόθεμα που έχει κατανεμηθεί σε αυτή την κατασκευή" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Σε εκκρεμότητα" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Παραγωγή" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Ακυρώθηκε" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Ολοκληρώθηκε" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Το Απόθεμα δεν έχει κατανεμηθεί πλήρως σε αυτή την Εντολή Κατασκευής" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" @@ -1846,7 +1697,7 @@ msgstr "Αυτή η κατασκευή είχε προθεσμία %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Ολοκληρωμένα Προϊόντα" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Εντολές Πώλησης" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Εκδόθηκε από" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Προτεραιότητα" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "Διαγραφή Εντολής Κατασκευής" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "Κωδικός QR Εντολής Κατασκευής" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "Σύνδεση Barcode με την Εντολή Κατασκευής" @@ -1911,8 +1762,8 @@ msgstr "Προέλευση Αποθέματος" msgid "Stock can be taken from any available location." msgstr "Το απόθεμα μπορεί να ληφθεί από οποιαδήποτε διαθέσιμη τοποθεσία." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Προορισμός" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "A build order has been completed" +msgid "Mark Shipped Orders as Complete" +msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3827,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4170,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Τοποθετήθηκε" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,575 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" + +#: order/models.py:1030 +msgid "Order is already cancelled" msgstr "" -#: order/models.py:1004 +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Αποστάλθηκε" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Χάθηκε" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Επιστράφηκε" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Σε Εξέλιξη" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Επιστροφή" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Επισκευή" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Αντικατάσταση" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Επιστροφή χρημάτων" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Απόρριψη" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5415,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5425,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5440,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5462,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5524,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5570,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5582,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5631,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5672,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5739,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5753,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5775,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5791,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5808,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5974,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6697,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6713,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7157,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7255,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7322,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7344,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7393,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7416,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7439,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7510,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7557,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7629,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7709,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7775,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7870,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7897,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7951,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7975,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8003,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8019,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8116,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8179,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8272,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8685,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8710,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "ΟΚ" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Απαιτείται προσοχή" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Κατεστραμμένο" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Καταστράφηκε" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Απορρίφθηκε" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Σε Καραντίνα" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Καταχώρηση παλαιού αποθέματος" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Το αντικείμενο αποθεμάτων δημιουργήθηκε" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Έγινε συγχώνευση αποθεμάτων" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Εκχωρημένος σειριακός κωδικός" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Απόθεμα που μετρήθηκε" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Προστέθηκε απόθεμα χειροκίνητα" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Αφαιρέθηκε απόθεμα χειροκίνητα" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Η τοποθεσία τροποποιήθηκε" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Το απόθεμα ενημερώθηκε" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Εγκαταστάθηκε στη συναρμολόγηση" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Αφαιρέθηκε από τη συναρμολόγηση" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Εγκαταστάθηκε αντικείμενο" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Αφαιρέθηκε αντικείμενο" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Έγινε διαχωρισμός από το γονεϊκό αρχείο" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Διαχωρίστηκε θυγατρικό στοιχείο" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Έγινε συγχώνευση αποθεμάτων" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Μετατράπηκε σε παραλλαγή" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Δημιουργήθηκε η έξοδος παραγγελίας" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Η έξοδος της σειράς κατασκευής ολοκληρώθηκε" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Η εντολή κατασκευής απορρίφθηκε" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Κατανάλωση με εντολή κατασκευής" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Αποστολή έναντι Εντολής Πώλησης" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Λήφθηκε έναντι Εντολής Αγοράς" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Επιστράφηκε έναντι Εντολής Αγοράς" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Απεστάλη στον πελάτη" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Επιστράφηκε από πελάτη" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9448,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9468,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9495,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9514,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9560,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Κατασκευή" @@ -9497,7 +9626,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9657,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9754,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10005,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10049,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10087,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10274,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10295,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10361,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10383,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10418,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10517,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10740,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10960,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10974,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11139,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11329,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11349,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11404,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11573,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12019,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12056,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12089,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12138,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12264,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12502,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12526,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12542,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12762,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12775,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12832,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12886,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12906,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12997,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13059,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13416,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13424,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14070,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14307,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index f40d3d6c40..be983506d7 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: 2024-04-20 13:19+0000\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,11 +18,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -57,26 +57,26 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -133,7 +133,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -325,14 +325,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -352,145 +356,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -500,98 +504,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -683,7 +687,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -695,202 +699,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -939,45 +747,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -985,16 +793,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1005,708 +813,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1823,18 +1674,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1847,7 +1698,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1861,42 +1712,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1912,8 +1763,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1927,10 +1778,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1940,8 +1791,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1950,7 +1801,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2044,11 +1895,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2126,1458 +1977,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3587,135 +3463,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3737,7 +3613,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3753,63 +3629,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3902,9 +3778,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3950,7 +3826,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4042,19 +3918,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4069,13 +3945,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4087,61 +3963,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4149,97 +4024,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4258,7 +4133,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4294,11 +4169,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4317,15 +4192,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4335,10 +4210,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4347,7 +4222,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4356,19 +4231,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4521,7 +4396,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4531,7 +4406,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4581,11 +4456,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4631,11 +4506,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4644,12 +4519,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4681,13 +4556,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4724,126 +4599,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4904,63 +4705,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4977,517 +4779,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5554,7 +5412,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5564,13 +5422,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5579,19 +5437,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5601,15 +5459,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5663,11 +5521,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5709,15 +5567,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5730,7 +5579,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5779,30 +5628,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5820,25 +5669,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5882,12 +5736,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5896,20 +5750,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5918,15 +5772,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5934,11 +5788,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5951,160 +5805,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6113,698 +5971,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6822,7 +6694,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6838,299 +6710,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7282,7 +7154,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7380,15 +7252,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7447,7 +7319,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7469,7 +7341,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7518,7 +7390,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7541,7 +7413,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7564,19 +7436,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7635,8 +7507,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7682,7 +7554,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7754,7 +7626,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7834,7 +7706,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7900,8 +7772,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7995,20 +7867,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8022,7 +7894,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8076,19 +7948,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8100,11 +7972,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8128,7 +8000,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8144,11 +8016,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8241,61 +8113,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8303,17 +8176,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8396,279 +8269,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8725,7 +8682,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8750,555 +8707,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9320,7 +9445,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9340,11 +9465,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9367,17 +9492,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9386,12 +9511,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9432,7 +9557,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9498,7 +9623,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9529,40 +9654,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9626,28 +9751,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9873,12 +10002,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9917,11 +10046,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9955,36 +10084,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10142,7 +10271,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10163,7 +10292,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10229,7 +10358,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10251,7 +10380,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10286,7 +10415,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10385,49 +10514,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10608,26 +10737,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10828,7 +10957,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10842,7 +10971,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11007,7 +11136,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11197,7 +11326,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11217,30 +11346,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11272,7 +11401,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11441,207 +11570,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11887,12 +12016,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11924,7 +12053,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11957,32 +12086,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12006,51 +12135,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12168,7 +12261,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12406,19 +12499,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12430,7 +12523,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12446,101 +12539,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12666,7 +12759,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12679,7 +12772,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12737,12 +12829,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12791,7 +12883,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12811,81 +12903,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12917,25 +12994,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12979,140 +13056,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13320,7 +13413,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13328,180 +13421,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13974,6 +14067,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14195,34 +14304,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 3dc0e9e398..0a915caca9 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:20\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -17,67 +17,67 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" -msgstr "" +msgstr "Endpoint de API no encontrado" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" -msgstr "" +msgstr "El usuario no tiene permiso para ver este modelo" #: InvenTree/conversion.py:160 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Unidad proporcionada no válida ({unit})" #: InvenTree/conversion.py:177 msgid "No value provided" -msgstr "" +msgstr "Ningún valor proporcionado" #: InvenTree/conversion.py:204 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "" +msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:206 msgid "Invalid quantity supplied" -msgstr "" +msgstr "La cantidad suministrada es inválida" #: InvenTree/conversion.py:220 #, python-brace-format msgid "Invalid quantity supplied ({exc})" -msgstr "" +msgstr "La cantidad suministrada es inválida ({exc})" #: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" -msgstr "" +msgstr "Detalles del error pueden encontrarse en el panel de administración" #: InvenTree/fields.py:139 msgid "Enter date" -msgstr "" +msgstr "Ingrese la fecha" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" -msgstr "" +msgstr "Notas" #: InvenTree/format.py:164 #, python-brace-format @@ -86,410 +86,414 @@ msgstr "" #: InvenTree/format.py:175 msgid "Provided value does not match required pattern: " -msgstr "" +msgstr "El valor proporcionado no coincide con el patrón requerido: " #: InvenTree/forms.py:128 msgid "Enter password" -msgstr "" +msgstr "Ingresa tu contraseña" #: InvenTree/forms.py:129 msgid "Enter new password" -msgstr "" +msgstr "Ingrese su nueva contraseña" #: InvenTree/forms.py:138 msgid "Confirm password" -msgstr "" +msgstr "Confirma la contraseña" #: InvenTree/forms.py:139 msgid "Confirm new password" -msgstr "" +msgstr "Confirma la nueva contraseña" #: InvenTree/forms.py:143 msgid "Old password" -msgstr "" +msgstr "Contraseña anterior" #: InvenTree/forms.py:182 msgid "Email (again)" -msgstr "" +msgstr "Email (de nuevo)" #: InvenTree/forms.py:186 msgid "Email address confirmation" -msgstr "" +msgstr "Confirmación de correo electrónico" #: InvenTree/forms.py:209 msgid "You must type the same email each time." -msgstr "" +msgstr "El correo electrónico debe coincidir." #: InvenTree/forms.py:253 InvenTree/forms.py:261 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "La dirección de correo electrónico principal proporcionada no es válida." #: InvenTree/forms.py:268 msgid "The provided email domain is not approved." -msgstr "" +msgstr "El dominio de correo electrónico proporcionado no está aprobado." #: InvenTree/forms.py:395 msgid "Registration is disabled." -msgstr "" +msgstr "El registro ha sido desactivado." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" -msgstr "" +msgstr "Cantidad proporcionada no válida" #: InvenTree/helpers.py:533 msgid "Empty serial number string" -msgstr "" +msgstr "No se ha proporcionado un número de serie" #: InvenTree/helpers.py:562 msgid "Duplicate serial" -msgstr "" +msgstr "Número de serie duplicado" #: InvenTree/helpers.py:594 InvenTree/helpers.py:637 #, python-brace-format msgid "Invalid group range: {group}" -msgstr "" +msgstr "Rango de grupo inválido: {group}" #: InvenTree/helpers.py:625 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" +msgstr "El rango del grupo {group} supera la cantidad permitida ({expected_quantity})" #: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 #, python-brace-format msgid "Invalid group sequence: {group}" -msgstr "" +msgstr "Secuencia de grupo inválida: {group}" #: InvenTree/helpers.py:691 msgid "No serial numbers found" -msgstr "" +msgstr "No se encontraron números de serie" #: InvenTree/helpers.py:696 msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" -msgstr "" +msgstr "Los números de serie únicos ({len(serials)}) deben coincidir con la cantidad ({expected_quantity})" #: InvenTree/helpers.py:814 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "Elimine etiquetas HTML de este valor" #: InvenTree/helpers_model.py:150 msgid "Connection error" -msgstr "" +msgstr "Error de conexión" #: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 msgid "Server responded with invalid status code" -msgstr "" +msgstr "El servidor respondió con un código de estado no válido" #: InvenTree/helpers_model.py:158 msgid "Exception occurred" -msgstr "" +msgstr "Se ha producido una excepción" #: InvenTree/helpers_model.py:168 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "El servidor respondió con un valor de longitud de contenido inválido" #: InvenTree/helpers_model.py:171 msgid "Image size is too large" -msgstr "" +msgstr "El tamaño de la imagen es demasiado grande" #: InvenTree/helpers_model.py:183 msgid "Image download exceeded maximum size" -msgstr "" +msgstr "La imagen descargada exedió el tamaño máximo" #: InvenTree/helpers_model.py:188 msgid "Remote server returned empty response" -msgstr "" +msgstr "El servidor remoto devolvió una respuesta vacía" #: InvenTree/helpers_model.py:196 msgid "Supplied URL is not a valid image file" -msgstr "" +msgstr "La URL proporcionada no es un archivo de imagen válido" #: InvenTree/locales.py:18 msgid "Bulgarian" -msgstr "" +msgstr "Búlgaro" #: InvenTree/locales.py:19 msgid "Czech" -msgstr "" +msgstr "Checo" #: InvenTree/locales.py:20 msgid "Danish" -msgstr "" +msgstr "Danés" #: InvenTree/locales.py:21 msgid "German" -msgstr "" +msgstr "Alemán" #: InvenTree/locales.py:22 msgid "Greek" -msgstr "" +msgstr "Griego" #: InvenTree/locales.py:23 msgid "English" -msgstr "" +msgstr "Inglés" #: InvenTree/locales.py:24 msgid "Spanish" -msgstr "" +msgstr "Español" #: InvenTree/locales.py:25 msgid "Spanish (Mexican)" -msgstr "" +msgstr "Español (México)" #: InvenTree/locales.py:26 msgid "Farsi / Persian" -msgstr "" +msgstr "Farsi / Persa" #: InvenTree/locales.py:27 msgid "Finnish" -msgstr "" +msgstr "Finlandés" #: InvenTree/locales.py:28 msgid "French" -msgstr "" +msgstr "Francés" #: InvenTree/locales.py:29 msgid "Hebrew" -msgstr "" +msgstr "Hebreo" #: InvenTree/locales.py:30 msgid "Hindi" -msgstr "" +msgstr "Hindi" #: InvenTree/locales.py:31 msgid "Hungarian" -msgstr "" +msgstr "Húngaro" #: InvenTree/locales.py:32 msgid "Italian" -msgstr "" +msgstr "Italiano" #: InvenTree/locales.py:33 msgid "Japanese" -msgstr "" +msgstr "Japonés" #: InvenTree/locales.py:34 msgid "Korean" -msgstr "" +msgstr "Coreano" #: InvenTree/locales.py:35 msgid "Latvian" -msgstr "" +msgstr "Letón" #: InvenTree/locales.py:36 msgid "Dutch" -msgstr "" +msgstr "Holandés" #: InvenTree/locales.py:37 msgid "Norwegian" -msgstr "" +msgstr "Noruego" #: InvenTree/locales.py:38 msgid "Polish" -msgstr "" +msgstr "Polaco" #: InvenTree/locales.py:39 msgid "Portuguese" -msgstr "" +msgstr "Portugués" #: InvenTree/locales.py:40 msgid "Portuguese (Brazilian)" -msgstr "" +msgstr "Portugués (Brasileño)" #: InvenTree/locales.py:41 msgid "Russian" -msgstr "" +msgstr "Ruso" #: InvenTree/locales.py:42 msgid "Slovak" -msgstr "" +msgstr "Eslovaco" #: InvenTree/locales.py:43 msgid "Slovenian" -msgstr "" +msgstr "Esloveno" #: InvenTree/locales.py:44 msgid "Serbian" -msgstr "" +msgstr "Serbio" #: InvenTree/locales.py:45 msgid "Swedish" -msgstr "" +msgstr "Sueco" #: InvenTree/locales.py:46 msgid "Thai" -msgstr "" +msgstr "Tailandés" #: InvenTree/locales.py:47 msgid "Turkish" -msgstr "" +msgstr "Turco" #: InvenTree/locales.py:48 -msgid "Vietnamese" -msgstr "" +msgid "Ukrainian" +msgstr "Ucraniano" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" -msgstr "" +msgid "Vietnamese" +msgstr "Vietnamita" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "Chino (Simplificado)" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" -msgstr "" +msgstr "Chino (Tradicional)" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "" +msgstr "[{site_name}] Iniciar sesión en la aplicación" #: InvenTree/magic_login.py:38 company/models.py:133 #: company/templates/company/company_base.html:138 #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "" +msgstr "Correo electrónico" #: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "" +msgstr "Error al ejecutar la validación del plugin" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" -msgstr "" +msgstr "Error al cambiar el nombre del archivo" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" -msgstr "" +msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" -msgstr "" +msgstr "Selección no válida" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" -msgstr "" +msgstr "Nombre" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" -msgstr "" +msgstr "Descripción" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" -msgstr "" +msgstr "Descripción (opcional)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" -msgstr "" +msgstr "padre" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" -msgstr "" +msgstr "Ruta" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" -msgstr "" +msgstr "Notas (opcional)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" -msgstr "" +msgstr "Datos de código de barras" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" -msgstr "" +msgstr "Datos de código de barras de terceros" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" -msgstr "" +msgstr "Hash del Código de barras" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" -msgstr "" +msgstr "Hash único de datos de código de barras" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" -msgstr "" +msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" -msgstr "" +msgstr "Error de servidor" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index f40d3d6c40..be983506d7 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,11 +18,11 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -57,26 +57,26 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -133,7 +133,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -325,14 +325,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -352,145 +356,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -500,98 +504,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -683,7 +687,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -695,202 +699,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -939,45 +747,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -985,16 +793,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1005,708 +813,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1823,18 +1674,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1847,7 +1698,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1861,42 +1712,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1912,8 +1763,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1927,10 +1778,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1940,8 +1791,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1950,7 +1801,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2044,11 +1895,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2126,1458 +1977,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3587,135 +3463,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3737,7 +3613,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3753,63 +3629,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3902,9 +3778,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3950,7 +3826,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4042,19 +3918,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4069,13 +3945,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4087,61 +3963,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4149,97 +4024,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4258,7 +4133,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4294,11 +4169,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4317,15 +4192,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4335,10 +4210,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4347,7 +4222,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4356,19 +4231,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4521,7 +4396,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4531,7 +4406,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4581,11 +4456,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4631,11 +4506,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4644,12 +4519,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4681,13 +4556,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4724,126 +4599,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4904,63 +4705,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4977,517 +4779,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5554,7 +5412,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5564,13 +5422,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5579,19 +5437,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5601,15 +5459,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5663,11 +5521,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5709,15 +5567,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5730,7 +5579,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5779,30 +5628,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5820,25 +5669,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5882,12 +5736,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5896,20 +5750,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5918,15 +5772,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5934,11 +5788,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5951,160 +5805,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6113,698 +5971,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6822,7 +6694,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6838,299 +6710,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7282,7 +7154,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7380,15 +7252,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7447,7 +7319,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7469,7 +7341,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7518,7 +7390,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7541,7 +7413,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7564,19 +7436,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7635,8 +7507,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7682,7 +7554,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7754,7 +7626,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7834,7 +7706,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7900,8 +7772,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7995,20 +7867,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8022,7 +7894,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8076,19 +7948,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8100,11 +7972,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8128,7 +8000,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8144,11 +8016,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8241,61 +8113,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8303,17 +8176,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8396,279 +8269,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8725,7 +8682,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8750,555 +8707,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9320,7 +9445,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9340,11 +9465,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9367,17 +9492,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9386,12 +9511,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9432,7 +9557,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9498,7 +9623,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9529,40 +9654,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9626,28 +9751,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9873,12 +10002,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9917,11 +10046,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9955,36 +10084,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10142,7 +10271,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10163,7 +10292,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10229,7 +10358,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10251,7 +10380,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10286,7 +10415,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10385,49 +10514,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10608,26 +10737,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10828,7 +10957,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10842,7 +10971,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11007,7 +11136,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11197,7 +11326,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11217,30 +11346,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11272,7 +11401,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11441,207 +11570,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11887,12 +12016,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11924,7 +12053,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11957,32 +12086,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12006,51 +12135,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12168,7 +12261,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12406,19 +12499,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12430,7 +12523,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12446,101 +12539,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12666,7 +12759,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12679,7 +12772,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12737,12 +12829,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12791,7 +12883,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12811,81 +12903,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12917,25 +12994,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12979,140 +13056,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13320,7 +13413,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13328,180 +13421,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13974,6 +14067,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14195,34 +14304,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index 609252e6b9..8bf4af893b 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:20\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "Address e API peida nashod" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد" @@ -56,26 +56,26 @@ msgstr "جزئیات خطا را می توان در پنل مدیریت پیدا msgid "Enter date" msgstr "تاریخ را وارد کنید" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "یادداشت" @@ -132,7 +132,7 @@ msgstr "دامنه ایمیل ارائه شده تایید نشده است." msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "آدرس فایل تصویری از راه دور" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "مرجع سفارش فروش" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "منبع محل" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "مقصد" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "تایید" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index f8755e2384..fda464f2eb 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API-rajapintaa ei löydy" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen" @@ -56,26 +56,26 @@ msgstr "Virheen tiedot löytyvät hallintapaneelista" msgid "Enter date" msgstr "Anna päivämäärä" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Merkinnät" @@ -132,7 +132,7 @@ msgstr "Annetun sähköpostiosoitteen verkkotunnusta ei hyväksytä." msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "turkki" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "vietnam" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "Sähköposti" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metatietojen tulee olla python dict objekti" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Liitännäisen metadata" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadatakenttä, ulkoisten liitännäisten käyttöön" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Virheellisesti muotoiltu malli" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Viitekenttä ei voi olla tyhjä" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Viitenumero on liian suuri" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Puuttuva tiedosto" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Puuttuva ulkoinen linkki" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Liite" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Valitse liitettävä tiedosto" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Linkki" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Linkki ulkoiseen URLiin" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Kommentti" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Tiedoston kommentti" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Käyttäjä" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "latauspäivä" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Tiedoston nimi ei saa olla tyhjä" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Virheellinen liitteen hakemisto" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Tiedostonimi sisältää kielletyn merkin '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Tiedostonimen pääte puuttuu" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Samanniminen liite on jo olemassa" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Virhe tiedoston uudelleennimeämisessä" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Virheellinen valinta" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Virheellinen valinta" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Kuvaus" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Polku" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Viivakoodin Tiedot" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Palvelinvirhe" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "Kuvatiedoston URL" msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "InvenTree järjestelmän terveystarkastukset epäonnistui" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Odottaa" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Valmis" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Peruttu" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Kadonnut" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Palautettu" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Kesken" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Lähetetty" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Huomiota tarvitaan" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Vahingoittunut" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Tuhottu" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Hylätty" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Asetettu karanteeniin" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Varastotuote luotu" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Sijainti muutettu" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Varasto päivitetty" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "Järjestelmän tiedot" msgid "About InvenTree" msgstr "Tietoja InvenTree:stä" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "Saatavilla" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Osa" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Määrä" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Sijainti" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Tila" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Odottaa" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Peruttu" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Valmis" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Prioriteetti" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Valmis" @@ -2043,11 +1894,11 @@ msgstr "Liitteet" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Ei ryhmää" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Verkkotunnus ei saa olla tyhjä." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Virheellinen verkkotunnus: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Uudelleenkäynnistys vaaditaan" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Yrityksen nimi" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Yrityksen sisäinen nimi" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Oletusvaluutta" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "päivää" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Automaattinen varmuuskopionti" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Ota käyttöön tietokannan ja mediatiedostojen automaattinen varmuuskopiointi" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Automaattisen varmuuskopioinnin aikaväli" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Viivakoodituki" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponentti" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Ostettavissa" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Seurattavissa" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Sisäiset hinnat" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Sisäisen hinnan ohitus" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Sivun koko" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Täytä sarjanumerot automaattisesti" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Salli salasananpalautus" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Salli rekisteröinti" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "Salli SSO" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "Salli SSO kirjautumissivuilla" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "Salli SSO rekisteröinti" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Sähköposti vaaditaan" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "Sähköpostiosoite kahdesti" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Salasana kahdesti" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Sallitut verkkotunnukset" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Pakota MFA" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Näytä uutiset" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Näytä uutiset kotisivulla" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Hinta" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "Aktiivinen" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Salaisuus" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "Isäntä" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Otsikko" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Julkaistu" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Julkaisija" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Kuva" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "Kuvatiedosto" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Kontakti" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Yritys" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "Valitse valmistaja" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "Valmistajan osanumero" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Arvo" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Toimittaja" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Valitse valmistajan osa" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Muistiinpano" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "Poista yritys" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "Osan kuva" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "Asiakas" msgid "Uses default currency" msgstr "Käyttää oletusvaluuttaa" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Osoite" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "Puhelin" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Poista" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "Yritykset" msgid "New Company" msgstr "Uusi yritys" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Käytössä" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Leveys [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Korkeus [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Suodattimet" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-koodi" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Hinta yhteensä" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "Tilauksen valuutta" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Tilauksen viite" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Asiakkaan viite " -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Vastaanotettu" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Lähetetty" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Seurantakoodi" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Laskunumero" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Kadonnut" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Palautettu" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Kesken" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "Kokonaiskustannukset" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "Kokonaiskustannuksia ei voitu laskea" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Avainsanat" @@ -5917,15 +5771,15 @@ msgstr "Avainsanat" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Kategoria" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Oletus avainsanat" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Kuvake" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "Muut merkinnät" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Raportti" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Käytössä" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Luo raportti" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "Muokkaa" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "Avain" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Suodattimet" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Leveys [mm]" + +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Korkeus [mm]" + +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" -msgstr "" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" -msgstr "" - -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" msgstr "" +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-koodi" + #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Sarjanumero" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Sarjanumero" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Huomiota tarvitaan" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Vahingoittunut" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Tuhottu" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Hylätty" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Asetettu karanteeniin" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Varastotuote luotu" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Sijainti muutettu" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Varasto päivitetty" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Varoitus" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Uusi sijainti" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Poista" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Aktiiviset istunnot" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "Kirjaa ulos aktiiviset istunnot (paitsi tämä)" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "Kirjaa ulos aktiiviset istunnot" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "IP-osoite" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Laite" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "Vahvista" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Kirjaudu sisään" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Unohtuiko salasana?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "Tallenna" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Ryhmä" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Näytä" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Oikeus tarkastella kohteita" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Oikeus lisätä kohteita" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Muuta" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Oikeus muokata kohteita" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Oikeus poistaa kohteita" - diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 14e4235034..98e876a5d5 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "L'utilisateur n'a pas la permission de voir ce modèle" @@ -56,28 +56,28 @@ msgstr "Les détails de l'erreur peuvent être trouvées dans le panneau d'admin msgid "Enter date" msgstr "Entrer la date" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" -msgstr "" +msgstr "Notes" #: InvenTree/format.py:164 #, python-brace-format @@ -132,7 +132,7 @@ msgstr "Le domaine e-mail fourni n'est pas approuvé." msgid "Registration is disabled." msgstr "L'enregistrement est désactivé." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" @@ -253,7 +253,7 @@ msgstr "Hébreu" #: InvenTree/locales.py:30 msgid "Hindi" -msgstr "" +msgstr "Hindi" #: InvenTree/locales.py:31 msgid "Hungarian" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turc" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "Ukrainien" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamien" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Chinois (Simplifié)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Chinois (Traditionnel)" @@ -351,145 +355,145 @@ msgstr "E-mail" msgid "Error running plugin validation" msgstr "Erreur lors de l'exécution de la validation du plugin" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Les metadata doivent être un objet python de type \"dict\"" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Métadonnées de l'Extension" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Champs metadata JSON, pour plugins tiers" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Modèle mal formaté" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Clé de format inconnu spécifiée" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Clé de format requise manquante" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Le champ de référence ne peut pas être vide" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "La référence doit correspondre au modèle requis" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Le numéro de référence est trop grand" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Fichier manquant" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Lien externe manquant" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Pièce jointe" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Lien" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Lien vers une url externe" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Commentaire" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Commentaire du fichier" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Utilisateur" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "date de chargement" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Le nom de fichier ne doit pas être vide" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Répertoire de pièce jointe invalide" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Le nom de fichier contient le caractère illégal '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Extension manquante du nom de fichier" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Une pièce jointe avec ce nom de fichier existe déjà" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Erreur lors du renommage du fichier" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 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:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Choix invalide" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" -msgstr "" +msgstr "Description" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" -msgstr "" +msgstr "parent" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Chemin d'accès" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Notes Markdown (option)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Données du code-barres" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Données de code-barres tierces" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Hash du code-barre" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Hachage unique des données du code-barres" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Code-barres existant trouvé" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Erreur serveur" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Doit être un nombre valide" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL du fichier image distant" msgid "Downloading images from remote URL is not enabled" msgstr "Le téléchargement des images depuis une URL distante n'est pas activé" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Échec de la vérification du processus d'arrière-plan" @@ -694,202 +698,6 @@ msgstr "Backend d'email non configuré" msgid "InvenTree system health checks failed" msgstr "Échec des contrôles de santé du système" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "En attente" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Placé" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Terminé" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Annulé" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Perdu" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Retourné" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "En Cours" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Expédié" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Attention requise" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Endommagé" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Détruit" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Rejeté" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "En quarantaine" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Ancienne entrée de suivi de stock" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Article en stock créé" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Article de stock modifié" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Numéro de série attribué" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Stock comptabilisé" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Stock ajouté manuellement" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Stock supprimé manuellement" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Emplacement modifié" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Stock mis à jour" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Installé dans l'assemblage" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Retiré de l'assemblage" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Composant installé" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Composant retiré" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Séparer de l'élément parent" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Fractionner l'élément enfant" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Articles de stock fusionnés" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Converti en variante" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "La sortie de l'ordre de construction a été créée" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Sortie de l'ordre de construction terminée" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "La sortie de l'ordre de construction a été refusée" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Consommé par ordre de construction" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Commandes expédiées vs. ventes" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Livraisons reçues vs. commandes réalisées" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Livraisons retournées vs. commandes retournées" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Envoyé au client" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Retourné par le client" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Fabrication" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Retour" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Réparer" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Remplacer" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Remboursement" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Refuser" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Base de données inconnue" @@ -938,45 +746,45 @@ msgstr "Informations système" msgid "About InvenTree" msgstr "À propos d'InvenTree" -#: build/api.py:238 +#: build/api.py:255 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:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Consommable" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Facultatif" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Suivi" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Allouée" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Allouée" msgid "Available" msgstr "Disponible" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Ordre de Fabrication" msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Choix invalide pour la fabrication parente" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "Un utilisateur ou un groupe responsable doit être spécifié" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "La pièce de commande de construction ne peut pas être changée" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Référence" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Brève description de la fabrication (optionnel)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Fabrication parente" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "BuildOrder associé a cette fabrication" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Pièce" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Commande de vente à laquelle cette construction est allouée" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:240 +#: build/models.py:270 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:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Nombre de stock items à construire" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Articles terminés" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "État de la construction" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Date d'achèvement cible" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Date d'achèvement" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "achevé par" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Émis par" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Responsable" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Code du projet" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +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:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 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:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, 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:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Quantité" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1493 +#: build/models.py:1562 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:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Installer dans" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:176 +#: build/serializers.py:173 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:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Allouer automatiquement les numéros de série" - -#: build/serializers.py:302 -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:337 stock/api.py:995 -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:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Une liste d'ordre de production doit être fourni" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Emplacement" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Allouer automatiquement les numéros de série" + +#: build/serializers.py:316 +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:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +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:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "Une liste d'ordre de production doit être fourni" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "État" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:512 +#: build/serializers.py:527 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:592 -msgid "Remove Allocated Stock" -msgstr "Supprimer le stock alloué" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "Consommation du stock alloué" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Soustraire tout stock qui a déjà été alloué à cette construction" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:600 +#: build/serializers.py:620 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:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:653 +#: build/serializers.py:681 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:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:752 +#: build/serializers.py:788 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:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part doit pointer sur la même pièce que l'ordre de construction" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:871 +#: build/serializers.py:907 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:878 +#: build/serializers.py:914 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:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:980 +#: build/serializers.py:1016 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:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Stock alloué" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "En Commande" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Stock disponible" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "En attente" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Fabrication" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Annulé" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Terminé" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Stock requis pour la commande de construction" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Ordre de commande en retard" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Le stock n'a pas été entièrement alloué à cet ordre de construction" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Date Cible" @@ -1846,7 +1697,7 @@ msgstr "Cette construction était due le %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Sorties de Construction terminées" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Commandes" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Émis par" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Priorité" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "Supprimer la commande de construction" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "Génération du QR Code de commande" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "Lier le code-barres pour construire la commande" @@ -1911,10 +1762,10 @@ msgstr "Stock d'origine" msgid "Stock can be taken from any available location." msgstr "Le stock peut être pris à partir de n'importe quel endroit disponible." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" -msgstr "" +msgstr "Destination" #: build/templates/build/detail.html:56 msgid "Destination location not specified" @@ -1926,10 +1777,10 @@ msgstr "Pièces allouées" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "Lot" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Créé le" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Pas de date cible définie" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Terminé" @@ -2043,11 +1894,11 @@ msgstr "Pieces jointes" msgid "Build Notes" msgstr "Notes de construction" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "Allocation terminée" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "Toutes les lignes ont été entièrement attribuées" @@ -2125,1458 +1976,1485 @@ msgstr "Description du projet" msgid "User or group responsible for this project" msgstr "Utilisateur ou groupe responsable de ce projet" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Valeur du paramètre" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "La valeur doit être un nombre entier" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Pas de groupe" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Un domaine vide n'est pas autorisé." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Nom de domaine invalide : {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Pas de plugin" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "Un paramètre a été modifié, ce qui nécessite un redémarrage du serveur" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Migration en attente" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "Nombre de migrations de base de données en attente" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Nom de l'instance du serveur" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Utiliser le nom de l'instance" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Limiter l'affichage de `about`" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Afficher la modale `about` uniquement aux super-utilisateurs" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Nom de la société" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Nom de société interne" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "URL de base" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "URL de base pour l'instance serveur" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Devise par défaut" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "Sélectionnez la devise de base pour les calculs de prix" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "Intervalle de mise à jour des devises" -#: common/models.py:1313 +#: common/models.py:1314 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/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "jours" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "Plugin de mise à jour de devise" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "Plugin de mise à jour des devises à utiliser" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/models.py:1328 +#: common/models.py:1329 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/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Limite du volume de téléchargement" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "Taille maximale autorisée pour le téléchargement de l'image distante" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "Validation stricte d'URL" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "Spécification du schéma nécessaire lors de la validation des URL" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Confirmation requise" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Exiger une confirmation explicite de l’utilisateur pour certaines actions." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Profondeur de l'arborescence" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Profondeur de l'arborescence par défaut. Les niveaux plus profonds peuvent être chargés au fur et à mesure qu'ils sont nécessaires." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Intervalle de vérification des mises à jour" -#: common/models.py:1369 +#: common/models.py:1370 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/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Backup automatique" -#: common/models.py:1376 +#: common/models.py:1377 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/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Intervalle de sauvegarde automatique" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Intervalle de suppression des tâches" -#: common/models.py:1390 +#: common/models.py:1391 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/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "Intervalle de suppression du journal d'erreur" -#: common/models.py:1399 +#: common/models.py:1400 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/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "Intervalle de suppression du journal de notification" -#: common/models.py:1408 +#: common/models.py:1409 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/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "Activer le support du scanner de codes-barres dans l'interface web" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Délai d'entrée du code-barres" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Délai de traitement du code-barres" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "Modifications de la pièce" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Activer le champ de modification de la pièce" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "Regex IPN" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Modèle" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Assemblage" -#: common/models.py:1487 +#: common/models.py:1494 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/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Composant" -#: common/models.py:1493 +#: common/models.py:1500 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/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Achetable" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Vendable" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Traçable" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Afficher l'import dans les vues" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Afficher l'assistant d'importation pour certaine vues de produits" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Stock initial" -#: common/models.py:1535 +#: common/models.py:1542 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/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Données initiales du fournisseur" -#: common/models.py:1542 +#: common/models.py:1549 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/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Icône de catégorie par défaut" -#: common/models.py:1556 +#: common/models.py:1563 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/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "Renforcer les unités des paramètres" -#: common/models.py:1562 +#: common/models.py:1569 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/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Nombre minimal de décimales" -#: common/models.py:1570 +#: common/models.py:1577 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/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Utiliser le prix fournisseur" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inclure les réductions de prix dans le calcul du prix global" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Remplacer l'historique des achats" -#: common/models.py:1594 +#: common/models.py:1601 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/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Utiliser les prix des articles en stock" -#: common/models.py:1602 +#: common/models.py:1609 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/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Âge de tarification des articles de stock" -#: common/models.py:1610 +#: common/models.py:1617 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/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Utiliser les prix variants" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "Inclure la tarification variante dans le calcul global des prix" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Variantes actives uniquement" -#: common/models.py:1625 +#: common/models.py:1632 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/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "Intervalle de regénération des prix" -#: common/models.py:1633 +#: common/models.py:1640 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/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Prix internes" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "Si disponible, les prix internes remplacent les calculs de la fourchette de prix" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Résolution DPI lors de la génération de fichiers image pour fournir aux plugins d'impression d'étiquettes" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" -msgstr "" +msgstr "Journal des erreurs" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Taille de la page" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Activer les rapports de test" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Activer la génération de rapports de test" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Joindre des rapports de test" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Lors de l'impression d'un rapport de test, joignez une copie du rapport de test à l'article en stock associé" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/models.py:1707 +#: common/models.py:1714 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/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Remplir automatiquement les Numéros de Série" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Remplir automatiquement les numéros de série dans les formulaires" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "Modèle pour générer des codes par défaut pour les articles en stock" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Délai de péremption du stock" -#: common/models.py:1747 +#: common/models.py:1754 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/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Construction de stock expirée" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/models.py:1761 +#: common/models.py:1768 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/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/models.py:1767 +#: common/models.py:1774 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/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "Afficher les pièces en stock installées" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/models.py:1787 +#: common/models.py:1802 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/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "Activer les retours de commandes" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "Activer la fonctionnalité de retour de commande dans l'interface utilisateur" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "Modèle de référence de retour de commande" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "Modifier les retours de commandes terminées" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "Autoriser la modification des retours après leur enregistrement" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "Modèle de référence de bon de commande" -#: common/models.py:1837 +#: common/models.py:1852 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/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "Expédition par défaut du bon de commande" -#: common/models.py:1850 +#: common/models.py:1865 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/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "Modifier les commandes de vente terminées" -#: common/models.py:1857 +#: common/models.py:1872 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/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark Shipped Orders as Complete" +msgstr "Marquer la commande comme complète" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/models.py:1865 +#: common/models.py:1888 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/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Modifier les bons de commande terminés" -#: common/models.py:1879 +#: common/models.py:1902 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/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "Activer la fonction \"Mot de passe oublié\" sur les pages de connexion" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "Activer l'auto-inscription pour les utilisateurs sur les pages de connexion" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/models.py:1914 +#: common/models.py:1937 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/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Email requis" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/models.py:1928 +#: common/models.py:1951 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/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "Courriel en double" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mail" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mot de passe" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "Groupe auquel les nouveaux utilisateurs sont assignés lors de l'inscription" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/models.py:1968 +#: common/models.py:1991 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/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "Activer les codes projet" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "Fonctionnalité d'inventaire" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Activer la fonctionnalité d'inventaire pour enregistrer les niveaux de stock et le calcul de la valeur du stock" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "Période de l'inventaire automatique" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Nombre de jours entre l'enregistrement automatique des stocks (définir à zéro pour désactiver)" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Les rapports d'inventaire seront supprimés après le nombre de jours spécifié" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Clé du paramètre (doit être unique - insensible à la casse)" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Afficher les composants suivis" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Afficher les composants suivis sur l'écran d'accueil" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Afficher les catégories suivies" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Afficher les catégories de pièces suivies sur la page d'accueil" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Afficher les dernières pièces" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Afficher les derniers composants sur la page d'accueil" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Afficher les listes de matériaux en attente de validation sur la page d'accueil" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Afficher les dernières modifications du stock" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Afficher les articles de stock récemment modifiés sur la page d'accueil" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Afficher le stock faible" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Afficher les articles en stock bas sur la page d'accueil" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Afficher le stock épuisé" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Afficher les stocks épuisés sur la page d'accueil" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Afficher le stock nécessaire" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Afficher les pièces en stock nécessaires pour les assemblages sur la page d'accueil" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Afficher le stock expiré" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Afficher les pièces en stock expirées sur la page d'accueil" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Afficher le stock périmé" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Afficher les articles de stock périmés sur la page d'accueil" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Afficher les constructions en attente" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Afficher les constructions en attente sur la page d'accueil" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Afficher les constructions en retard" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Afficher les constructions en retard sur la page d'accueil" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "Afficher les commandes en suspens" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "Afficher les commandes en suspens sur la page d'accueil" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Afficher les commandes en retard" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "Afficher les commandes en retard sur la page d'accueil" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "Afficher les envois en suspens" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "Afficher les envois en suspens sur la page d'accueil" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Afficher les envois en retard" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "Afficher les envois en retard sur la page d'accueil" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Afficher les nouvelles" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Afficher les nouvelles sur la page d'accueil" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "Affichage du libellé en ligne" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Afficher les étiquettes PDF dans le navigateur, au lieu de les télécharger en tant que fichier" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "Imprimante d'étiquettes par défaut" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "Configurer quelle imprimante d'étiquette doit être sélectionnée par défaut" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "Affichage du rapport en ligne" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Afficher les rapports PDF dans le navigateur, au lieu de les télécharger en tant que fichier" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Rechercher de pièces" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "Afficher les pièces dans la fenêtre d'aperçu de la recherche" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" -msgstr "" +msgstr "Recherche du fournisseur de pièces" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "Afficher les pièces du fournisseur dans la fenêtre de prévisualisation de la recherche" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Rechercher les pièces du fabricant" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "Afficher les pièces du fabricant dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Masquer les pièces inactives" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "Exclure les pièces inactives de la fenêtre de prévisualisation de recherche" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "Rechercher des catégories" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "Afficher les catégories de pièces dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Rechercher dans le stock" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Afficher les pièces en stock dans la fenêtre d'aperçu de la recherche" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Cacher les pièces indisponibles" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Exclure les articles en stock qui ne sont pas disponibles de la fenêtre de prévisualisation de recherche" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Chercher des Emplacements" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "Afficher les emplacements dans la fenêtre d'aperçu de la recherche" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Rechercher les entreprises" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "Afficher les entreprises dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Rechercher les commandes de construction" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Afficher les commandes de construction dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Rechercher des bons de commande" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "Afficher les bons de commande dans la fenêtre de prévisualisation de recherche" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Exclure les bons de commande inactifs" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "Exclure les commandes d’achat inactives de la fenêtre de prévisualisation de recherche" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Rechercher les bons de commande" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "Afficher les bons de commande dans la fenêtre de prévisualisation de la recherche" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "Exclure les bons de commande inactives" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "Exclure les bons de commande inactifs de la fenêtre de prévisualisation de recherche" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Rechercher les commandes retournées" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "Résultats de l'aperçu de la recherche" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "Nombre de résultats à afficher dans chaque section de la fenêtre de prévisualisation de recherche" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Recherche Regex" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Afficher la quantité dans les formulaires" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "Afficher la quantité disponible dans certains formulaires" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "La touche Echap ferme les formulaires" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "Utilisez la touche Echap pour fermer les formulaires modaux" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Barre de navigation fixe" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "La position de la barre de navigation est fixée en haut de l'écran" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Format de date" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Format préféré pour l'affichage des dates" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Planification des pièces" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "Afficher les informations de planification des pièces" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventaire des pièces" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "Longueur de la chaîne dans les Tableau" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Prix" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,137 +3464,137 @@ msgstr "" msgid "Active" msgstr "Actif" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "Jeton" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Jeton d'accès" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "ID message" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "Hôte" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Entête" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Corps" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" -msgstr "" +msgstr "Id" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titre" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Publié" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Auteur" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Résumé" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Lu" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "Cette nouvelle a-t-elle été lue ?" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" -msgstr "" +msgstr "Image" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" -msgstr "" +msgstr "Fichier image" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" -msgstr "" +msgstr "Symbole" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" -msgstr "" +msgstr "Symbole d'unité facultatif" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Définition" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" -msgstr "" +msgstr "Définition de l'unité" #: common/notifications.py:314 #, python-brace-format @@ -3730,13 +3608,13 @@ msgstr "Une nouvelle commande a été créée et vous a été assignée" #: common/notifications.py:322 #, python-brace-format msgid "{verbose_name} canceled" -msgstr "" +msgstr "{verbose_name} annulé" #: common/notifications.py:324 msgid "A order that is assigned to you was canceled" -msgstr "" +msgstr "Une commande qui vous est assignée a été annulée" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "Articles reçus" @@ -3752,65 +3630,65 @@ msgstr "" msgid "Error raised by plugin" msgstr "Erreur déclenchée par le plugin" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" -msgstr "" +msgstr "En cours d'exécution" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" -msgstr "" +msgstr "Tâches en attente" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" -msgstr "" +msgstr "Tâches planifiées" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" -msgstr "" +msgstr "Tâches échouées" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" -msgstr "" +msgstr "ID de la tâche" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" -msgstr "" +msgstr "ID unique de la tâche" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" -msgstr "" +msgstr "Verrouillé" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" -msgstr "" +msgstr "Heure verrouillé" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" -msgstr "" +msgstr "Nom de la tâche" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" -msgstr "" +msgstr "Fonction" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" -msgstr "" +msgstr "Nom de la fonction" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" -msgstr "" +msgstr "Arguments" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" -msgstr "" +msgstr "Arguments tâche" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" -msgstr "" +msgstr "Mots-clés Arguments" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" -msgstr "" +msgstr "Mots-clés arguments tâche" #: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 #: order/templates/order/purchase_order_detail.html:24 order/views.py:118 @@ -3852,23 +3730,23 @@ msgstr "Étape précédente" #: company/api.py:164 msgid "Part is Active" -msgstr "" +msgstr "La pièce est active" #: company/api.py:168 msgid "Manufacturer is Active" -msgstr "" +msgstr "Le fabricant est actif" #: company/api.py:317 msgid "Supplier Part is Active" -msgstr "" +msgstr "Le fournisseur de la pièce est active" #: company/api.py:321 msgid "Internal Part is Active" -msgstr "" +msgstr "La pièce interne est active" #: company/api.py:325 msgid "Supplier is Active" -msgstr "" +msgstr "Le fournisseur est actif" #: company/models.py:114 msgid "Company description" @@ -3901,11 +3779,11 @@ msgid "Contact email address" msgstr "Adresse e-mail de contact" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" -msgstr "" +msgstr "Contact" #: company/models.py:141 msgid "Point of contact" @@ -3917,7 +3795,7 @@ msgstr "Lien externe vers les informations de l'entreprise" #: company/models.py:160 msgid "Is this company active?" -msgstr "" +msgstr "Cette entreprise est-elle active ?" #: company/models.py:165 msgid "is customer" @@ -3949,7 +3827,7 @@ msgstr "Devise par défaut utilisée pour cette entreprise" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Société" @@ -3960,15 +3838,15 @@ msgstr "Sélectionner une entreprise" #: company/models.py:388 msgid "Address title" -msgstr "" +msgstr "Intitulé de l'adresse" #: company/models.py:389 msgid "Title describing the address entry" -msgstr "" +msgstr "Titre décrivant la saisie de l'adresse" #: company/models.py:395 msgid "Primary address" -msgstr "" +msgstr "Adresse principale" #: company/models.py:396 msgid "Set as primary address" @@ -4039,21 +3917,21 @@ msgstr "Notes internes pour la livraison" #: company/models.py:458 msgid "Link to address information (external)" -msgstr "" +msgstr "Lien vers les informations de l'adresse (externe)" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Sélectionner un fabricant" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Pièces du fabricant" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Nom du paramètre" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Valeur" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Valeur du paramètre" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Unités" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Unités du paramètre" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 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:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "La pièce du fabricant liée doit faire référence à la même pièce d #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Fournisseur" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Sélectionner un fabricant" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "Lien de la pièce du fournisseur externe" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "coût de base" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Conditionnement" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Conditionnement de l'article" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "Nombre de paquet" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "plusieurs" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Commande multiple" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "Quantité disponible auprès du fournisseur" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "Disponibilité mise à jour" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "Date de dernière mise à jour des données de disponibilité" @@ -4257,7 +4134,7 @@ msgstr "En Stock" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4170,11 @@ msgstr "Supprimer la société" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "Télécharger l'image depuis l'URL" msgid "Delete image" msgstr "Supprimer image" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Client" msgid "Uses default currency" msgstr "Utiliser la devise par défaut" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adresse" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Téléphone" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Supprimer" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "Supprimer la pièce de fabricant" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Pièces Internes" @@ -4530,7 +4407,7 @@ msgstr "Aucune information sur le fabricant disponible" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "Adresses" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Pièce fournisseur" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "Aucune information de fournisseur disponible" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "Stock de pièces du fournisseur" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Créer un nouvel article de stock" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nouvel article de stock" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,243 +4600,170 @@ msgstr "Entreprises" msgid "New Company" msgstr "Nouvelle Entreprise" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Placé" -#: label/models.py:120 -msgid "Label name" -msgstr "Nom de l'étiquette" - -#: label/models.py:128 -msgid "Label description" -msgstr "Description de l’étiquette" - -#: label/models.py:136 -msgid "Label" -msgstr "Étiquette" - -#: label/models.py:137 -msgid "Label template file" -msgstr "Fichier de modèle d'étiquette" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Activé" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Le modèle d'étiquette est activé" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Largeur [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Largeur de l'étiquette, spécifiée en mm" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Hauteur [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Hauteur de l'étiquette, spécifiée en mm" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Modèle de nom de fichier" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "Modèle pour la génération des noms de fichiers d'étiquette" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Filtres" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Inconnu" -#: machine/machine_types/label_printer.py:235 -msgid "Printing" -msgstr "" - #: machine/machine_types/label_printer.py:236 -msgid "No media" -msgstr "" +msgid "Printing" +msgstr "Impression" #: machine/machine_types/label_printer.py:237 -msgid "Disconnected" -msgstr "" +msgid "No media" +msgstr "Aucun média" -#: machine/machine_types/label_printer.py:244 -msgid "Label Printer" -msgstr "" +#: machine/machine_types/label_printer.py:238 +msgid "Disconnected" +msgstr "Déconnecté" #: machine/machine_types/label_printer.py:245 -msgid "Directly print labels for various items." -msgstr "" +msgid "Label Printer" +msgstr "Imprimante Etiquette" -#: machine/machine_types/label_printer.py:251 -msgid "Printer Location" -msgstr "" +#: machine/machine_types/label_printer.py:246 +msgid "Directly print labels for various items." +msgstr "Impression directe des étiquettes pour divers articles." #: machine/machine_types/label_printer.py:252 +msgid "Printer Location" +msgstr "Emplacement Imprimante" + +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" -msgstr "" +msgstr "Porter de l'imprimante sur un emplacement spécifique" #: machine/models.py:25 msgid "Name of machine" -msgstr "" +msgstr "Nom de la machine" #: machine/models.py:29 msgid "Machine Type" -msgstr "" +msgstr "Machine Type" #: machine/models.py:29 msgid "Type of machine" -msgstr "" +msgstr "Type de machine" #: machine/models.py:34 machine/models.py:146 msgid "Driver" -msgstr "" +msgstr "Pilote" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "" +msgstr "Pilote utilisé pour la machine" #: machine/models.py:39 msgid "Machines can be disabled" -msgstr "" +msgstr "Les machines peuvent être inactivées" #: machine/models.py:95 msgid "Driver available" -msgstr "" +msgstr "Pilote disponible" #: machine/models.py:100 msgid "No errors" -msgstr "" +msgstr "Aucune erreur" #: machine/models.py:105 msgid "Initialized" -msgstr "" +msgstr "Initialisé" #: machine/models.py:110 msgid "Errors" -msgstr "" +msgstr "Erreurs" #: machine/models.py:117 msgid "Machine status" -msgstr "" +msgstr "Statut de la machine" #: machine/models.py:145 msgid "Machine" -msgstr "" +msgstr "Machine" #: machine/models.py:151 msgid "Machine Config" -msgstr "" +msgstr "Configuration de la machine" #: machine/models.py:156 msgid "Config type" -msgstr "" +msgstr "Type de configuration" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Prix Total" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Statut de la commande" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" -msgstr "" +msgstr "Possède un Tarif" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "Aucun bon de commande correspondant n'a été trouvé" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Commande" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" -msgstr "" +msgstr "Commande Complétée" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" -msgstr "" +msgstr "Commande En Attente" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Retour de commande" @@ -4976,517 +4780,577 @@ msgstr "Devise de la commande" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" -msgstr "" +msgstr "Description de la commande (facultatif)" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Lien vers une page externe" -#: order/models.py:299 +#: order/models.py:311 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:313 +#: order/models.py:325 msgid "Created By" msgstr "Créé par" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "Utilisateur ou groupe responsable de cette commande" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" -msgstr "" +msgstr "Adresse de l'entreprise pour cette commande" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Référence de la commande" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Statut de la commande d'achat" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "Société de laquelle les articles sont commandés" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "Référence du fournisseur" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "Code de référence de la commande fournisseur" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "reçu par" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Date d'émission" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Date d'émission de la commande" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "La quantité doit être un nombre positif" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Référence client " -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Nom de l’expédition" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "expédié par" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "La commande ne peut pas être terminée car aucune pièce n'a été assignée" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "L'ordre de production a déjà été réalisé" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "La commande ne peut pas être annulée" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 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:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "Contexte" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Prix unitaire" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "supprimé" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Reçu" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Prix d'achat unitaire" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Où l'Acheteur veut-il stocker cet article ?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "La pièce virtuelle ne peut pas être affectée à une commande" -#: order/models.py:1528 +#: order/models.py:1579 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:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Prix de vente unitaire" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Expédié" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Quantité expédiée" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Date d'expédition" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" -msgstr "" +msgstr "Date de Livraison" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Vérifié par" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Envoi" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Numéro d'expédition" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "N° de suivi" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Information de suivi des colis" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "N° de facture" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "Numéro de référence de la facture associée" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "Le colis a déjà été envoyé" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "L'expédition n'a pas d'articles en stock alloués" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "L'article de stock n'a pas été assigné" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Ligne" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Article" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "Statut du retour de commande" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 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:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Une quantité entière doit être fournie pour les pièces tracables" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" -msgstr "" +msgstr "Devise du prix de vente" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 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:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "Les numéros de série suivants sont déjà alloués" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Perdu" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Retourné" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "En Cours" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Retour" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Réparer" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Remplacer" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Remboursement" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Refuser" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5417,7 @@ msgstr "Marquer la commande comme complète" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Finaliser la commande" @@ -5563,13 +5427,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Référence de commande" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Description de la commande" @@ -5578,19 +5442,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Incomplet" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5464,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5639,7 +5503,7 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:35 #: templates/patterns/wizard/match_fields.html:34 msgid "File Fields" -msgstr "" +msgstr "Champs fichier" #: order/templates/order/order_wizard/match_fields.html:42 #: part/templates/part/import_wizard/ajax_match_fields.html:35 @@ -5662,11 +5526,11 @@ msgstr "Dupliquer la sélection" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,18 +5572,9 @@ msgstr "Commande déjà traitée. Les fichiers ne peuvent pas être chargés." msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" -msgstr "" +msgstr "Réception de Stock" #: order/templates/order/purchase_order_detail.html:18 msgid "Purchase Order Items" @@ -5729,33 +5584,33 @@ msgstr "Articles de la commande d'achat" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" -msgstr "" +msgstr "Ajouter un Article de la Chaîne" #: order/templates/order/purchase_order_detail.html:31 #: order/templates/order/purchase_order_detail.html:32 #: order/templates/order/return_order_detail.html:28 #: order/templates/order/return_order_detail.html:29 msgid "Receive Line Items" -msgstr "" +msgstr "Articles de la Chaîne reçus" #: order/templates/order/purchase_order_detail.html:50 #: order/templates/order/return_order_detail.html:45 #: order/templates/order/sales_order_detail.html:41 msgid "Extra Lines" -msgstr "" +msgstr "Lignes supplémentaires" #: order/templates/order/purchase_order_detail.html:56 #: order/templates/order/return_order_detail.html:51 #: order/templates/order/sales_order_detail.html:47 msgid "Add Extra Line" -msgstr "" +msgstr "Ajoutez une Ligne Supplémentaire" #: order/templates/order/purchase_order_detail.html:74 msgid "Received Items" -msgstr "" +msgstr "Articles reçus" #: order/templates/order/purchase_order_detail.html:99 #: order/templates/order/return_order_detail.html:85 @@ -5778,30 +5633,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" -msgstr "" +msgstr "Référence client" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" -msgstr "" +msgstr "Coût total" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5674,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5853,7 +5713,7 @@ msgstr "Expéditions en attente" #: order/templates/order/sales_order_detail.html:71 #: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 msgid "Actions" -msgstr "" +msgstr "Actions" #: order/templates/order/sales_order_detail.html:80 msgid "New Shipment" @@ -5881,929 +5741,947 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "ID de composant" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Nom de l'article" #: part/admin.py:45 part/stocktake.py:220 msgid "Part Description" -msgstr "" +msgstr "Description pièce" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Révision" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Mots-clés" #: part/admin.py:60 msgid "Part Image" -msgstr "" +msgstr "Image pièce" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" -msgstr "" +msgstr "ID catégorie" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" -msgstr "" +msgstr "Nom catégorie" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" -msgstr "" +msgstr "ID Emplacement par défaut" #: part/admin.py:76 msgid "Default Supplier ID" -msgstr "" +msgstr "ID Fournisseur par défaut" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" -msgstr "" +msgstr "Variante de" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Stock Minimum" #: part/admin.py:138 part/templates/part/part_sidebar.html:27 msgid "Used In" -msgstr "" +msgstr "Utilisé pour" #: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 #: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 msgid "Building" -msgstr "" +msgstr "Construction" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" -msgstr "" +msgstr "Coût minimal" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" -msgstr "" +msgstr "Coût maximal" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" -msgstr "" +msgstr "Chemin catégorie" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Pièces" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" -msgstr "" +msgstr "Profondeur" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" -msgstr "" +msgstr "Valide" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Catégorie" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" -msgstr "" +msgstr "Utilise" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" -msgstr "" +msgstr "Emplacement par défaut" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" -msgstr "" +msgstr "Stock total" #: part/forms.py:49 msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Catégorie de composant" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Catégories de composants" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" -msgstr "" +msgstr "Structurel" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 -msgid "Default keywords" -msgstr "" - #: part/models.py:119 +msgid "Default keywords" +msgstr "Mots-clés par défaut" + +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Nom de l'article" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" -msgstr "" +msgstr "Est-ce que cette pièce est active ?" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" -msgstr "" +msgstr "Création Utilisateur" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" -msgstr "" +msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" -msgstr "" +msgstr "Coût minimum de vente" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "Notes additionnelles" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Activé" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Requis" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "Données" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Valeur par Défaut" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Surplus" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Validée" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6699,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" @@ -6837,299 +6715,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Copier les paramètres" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7159,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "Prise d'inventaire" @@ -7379,15 +7257,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "Fabricants de composants" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7324,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Impression étiquette" @@ -7468,7 +7346,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7395,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7418,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7441,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7512,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7559,7 @@ msgstr "Modifier" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7631,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7711,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7777,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7872,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7899,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7953,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7977,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8005,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8021,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8118,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "Non du Plugin" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Extension Intégrée" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Extension" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8181,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8274,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Aucun objet valide n'a été fourni au modèle" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Nom du modèle" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Modèle de nom de fichier" + +#: report/models.py:203 +msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:204 +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Filtres" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Largeur [mm]" + +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Largeur de l'étiquette, spécifiée en mm" + +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Hauteur [mm]" + +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Hauteur de l'étiquette, spécifiée en mm" + +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:464 -msgid "Part Filters" -msgstr "Filtres de composants" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "" - -#: report/models.py:569 -msgid "Return order query filters" -msgstr "" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" -msgstr "" - -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "Extrait " -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "Elément" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "Requis pour" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Numéro de série" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Résultat" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Numéro de série" @@ -8724,7 +8687,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8712,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Sélectionner un propriétaire" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 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:683 +#: stock/models.py:700 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:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "Les numéros de série doivent être une liste de nombres entiers" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 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:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "OK" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Attention requise" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Endommagé" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Détruit" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Rejeté" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "En quarantaine" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Ancienne entrée de suivi de stock" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Article en stock créé" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Article de stock modifié" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Numéro de série attribué" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Stock comptabilisé" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Stock ajouté manuellement" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Stock supprimé manuellement" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Emplacement modifié" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Stock mis à jour" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Installé dans l'assemblage" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Retiré de l'assemblage" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Composant installé" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Composant retiré" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Séparer de l'élément parent" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Fractionner l'élément enfant" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Articles de stock fusionnés" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Converti en variante" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "La sortie de l'ordre de construction a été créée" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Sortie de l'ordre de construction terminée" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "La sortie de l'ordre de construction a été refusée" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Consommé par ordre de construction" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Commandes expédiées vs. ventes" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Livraisons reçues vs. commandes réalisées" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Livraisons retournées vs. commandes retournées" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Envoyé au client" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Retourné par le client" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9450,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9470,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9497,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9516,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9562,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Assemblage" @@ -9497,7 +9628,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9659,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9756,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10007,12 @@ msgstr "Paramètres de Connexion" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10051,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10089,36 @@ msgstr "Paramètres des Extensions" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Extensions" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "Les extensions tierces ne sont pas activées pour cette installation d'InvenTree" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10276,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Supprimer" @@ -10162,7 +10297,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10363,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10385,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10420,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10519,49 @@ msgstr "Configurer l'authentification multifacteurs" msgid "Remove multifactor" msgstr "Supprimer un facteur d'authentification" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Sessions actives" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "Se déconnecter des sessions actives (sauf celle-ci)" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "Se déconnecter des sessions actives" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "Adresse IP" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Appareil" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Dernière activité" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "Il y a %(time)s (session actuelle)" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10742,26 @@ msgstr "Confirmer" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10962,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Quantité requise" @@ -10841,7 +10976,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11141,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11331,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11351,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11406,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11575,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12021,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12058,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12091,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12140,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12266,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12504,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12528,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12544,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12764,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12777,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12834,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12888,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12908,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12999,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13061,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13418,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Ajouter" @@ -13327,180 +13426,180 @@ msgstr "Ajouter" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14072,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Données QR non fournies" @@ -14194,35 +14309,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Droit défini" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Groupe" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Vue" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Droit de voir des éléments" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Droit d'ajouter des éléments" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Modifier" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Droit de modifier des élément" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Droit de supprimer des éléments" - diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index 76fe1050c5..422c975cbd 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "הזן תאריך סיום" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -132,7 +132,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "טורקית" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "ווייטנאמית" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "קובץ חסר" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "קובץ מצורף" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "בחר קובץ לצירוף" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "קישור" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "קישור חיצוני" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "הערה" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "הערת קובץ" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "משתמש" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "תאריך העלאה" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "חובה למלא שם קובץ" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "תיקיית קובץ שגויה" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "שם הקובץ מכיל תו '{c}' שאינו חוקי" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "שגיאה בשינוי שם פריט" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "בחירה שגויה" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "שם" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "תיאור" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "מקור" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "בהמתנה" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "מוקם" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "הושלם" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "מבוטל" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "אבד" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "הוחזר" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "נשלח" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "מצב טוב" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "דרושה תשומת לב" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "פגום" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "הרוס" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "נדחה" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "מיקום שונה" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "נשלח ללקוח" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "הוחזר מלקוח" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "ייצור" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "מידע אודות המערכת" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "מקט" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "מקור הבנייה" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "רכיב" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "בחר רכיב לבנייה" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "כמות בניה" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "כמות" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "בהמתנה" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "ייצור" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "מבוטל" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "הושלם" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "מוקם" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "נשלח" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "אבד" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "הוחזר" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "מצב טוב" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "דרושה תשומת לב" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "פגום" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "הרוס" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "נדחה" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "מיקום שונה" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "נשלח ללקוח" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "הוחזר מלקוח" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "אשר" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 5fd43906bc..009acd345f 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:20\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "तारीख दर्ज करें" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -132,7 +132,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "ई-मेल" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index 12bfa8423e..ec2e6703ce 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API funkciót nem találom" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Nincs jogosultságod az adatok megtekintéséhez" @@ -56,26 +56,26 @@ msgstr "A hiba részleteit megtalálod az admin panelen" msgid "Enter date" msgstr "Dátum megadása" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Megjegyzések" @@ -132,7 +132,7 @@ msgstr "A megadott email domain nincs jóváhagyva." msgid "Registration is disabled." msgstr "Regisztráció le van tiltva." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" @@ -253,7 +253,7 @@ msgstr "Héber" #: InvenTree/locales.py:30 msgid "Hindi" -msgstr "" +msgstr "Hindi" #: InvenTree/locales.py:31 msgid "Hungarian" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Török" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "Ukrán" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnámi" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Kínai (egyszerűsített)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Kínai (Hagyományos)" @@ -345,151 +349,151 @@ msgstr "[{site_name}] Bejelentkezés" #: templates/InvenTree/settings/user.html:49 #: templates/js/translated/company.js:677 msgid "Email" -msgstr "" +msgstr "Email" #: InvenTree/models.py:107 msgid "Error running plugin validation" msgstr "Hiba a plugin validálása közben" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "A meta adatnak egy python dict objektumnak kell lennie" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Plugin meta adatok" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "JSON meta adat mező, külső pluginok számára" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Helytelenül formázott minta" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Ismeretlen formátum kulcs lett megadva" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Hiányzó formátum kulcs" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Az azonosító mező nem lehet üres" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Az azonosítónak egyeznie kell a mintával" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Azonosító szám túl nagy" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Hiányzó fájl" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Hiányzó külső link" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Melléklet" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Válaszd ki a mellekelni kívánt fájlt" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" -msgstr "" +msgstr "Link" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Link külső URL-re" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Megjegyzés" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Leírás, bővebb infó" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Felhasználó" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "feltöltés dátuma" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "A fájlnév nem lehet üres" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Érvénytelen melléklet mappa" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Fájlnévben érvénytelen karakter van '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Fájlnév kiterjesztése hiányzik" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Ilyen fájlnévvel már létezik melléklet" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Hiba a fájl átnevezésekor" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Érvénytelen választás" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Név" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Leírás" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "szülő" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Elérési út" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Markdown megjegyzések (opcionális)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Vonalkód adat" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Harmadik féltől származó vonalkód adat" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Vonalkód hash" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Egyedi vonalkód hash" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Létező vonalkód" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Kiszolgálóhiba" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "A távoli kép URL-je" msgid "Downloading images from remote URL is not enabled" msgstr "Képek letöltése távoli URL-ről nem engedélyezett" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Háttér folyamat ellenőrzés sikertelen" @@ -694,202 +698,6 @@ msgstr "Email backend nincs beállítva" msgid "InvenTree system health checks failed" msgstr "InvenTree rendszer állapotának ellenőrzése sikertelen" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Függőben" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Kiküldve" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Kész" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Törölve" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Elveszett" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Visszaküldve" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Folyamatban" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Kiszállítva" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "Rendben" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Ellenőrizendő" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Sérült" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Megsemmisült" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Elutasított" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Karanténban" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Örökölt készlet követési bejegyzés" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Készlet tétel létrehozva" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Szerkeszett készlet tétel" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Hozzárendelt sorozatszám" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Készlet leleltározva" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Készlet manuálisan hozzáadva" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Készlet manuálisan elvéve" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Hely megváltozott" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Készletadatok frissítve" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Gyártmányba beépült" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Gyártmányból eltávolítva" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Beépült összetevő tétel" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Eltávolított összetevő tétel" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Szülő tételből szétválasztva" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Szétválasztott gyermek tétel" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Összevont készlet tétel" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Alkatrészváltozattá alakítva" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Gyártási utasítás kimenete elkészült" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Gyártási utasítás kimenete kész" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Gyártási utasítás kimenete elutasítva" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Gyártásra felhasználva" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Vevői rendelésre kiszállítva" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Megrendelésre érkezett" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Visszavéve" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Vevőnek kiszállítva" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Vevőtől visszaérkezett" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Folyamatban" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Visszavétel" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Javítás" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Csere" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Visszatérítés" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Elutasított" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Ismeretlen adatbázis" @@ -938,45 +746,45 @@ msgstr "Rendszerinformáció" msgid "About InvenTree" msgstr "Verzió információk" -#: build/api.py:238 +#: build/api.py:255 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:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Opcionális" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Követett" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Lefoglalva" msgid "Available" msgstr "Elérhető" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Gyártási utasítás" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,709 +812,753 @@ msgstr "Gyártási utasítás" msgid "Build Orders" msgstr "Gyártási utasítások" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Hibás választás a szülő gyártásra" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "Meg kell adni felelős felhasználót vagy csoportot" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Gyártási rendelés alkatrész nem változtatható" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Azonosító" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Gyártás rövid leírása (opcionális)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Szülő gyártás" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Alkatrész" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Válassz alkatrészt a gyártáshoz" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Vevői rendelés azonosító" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Vevői rendelés amihez ez a gyártás hozzá van rendelve" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Forrás hely" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Cél hely" -#: build/models.py:240 +#: build/models.py:270 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:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Gyártási mennyiség" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Gyártandó készlet tételek száma" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Kész tételek" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Elkészült készlet tételek száma" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Gyártási állapot" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Létrehozás dátuma" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Befejezés cél dátuma" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Befejezés dátuma" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "elkészítette" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Indította" -#: build/models.py:300 +#: build/models.py:330 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:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Felelős" -#: build/models.py:309 +#: build/models.py:339 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:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Külső link" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Projektszám" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +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:615 #, 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:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:811 +#: build/models.py:853 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:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 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:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, 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:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1434 +#: build/models.py:1503 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:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:172 +#: build/serializers.py:169 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:176 +#: build/serializers.py:173 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:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:269 +#: build/serializers.py:276 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:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Sorozatszámok automatikus hozzárendelése" - -#: build/serializers.py:302 -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:337 stock/api.py:995 -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:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "A gyártási kimenetek listáját meg kell adni" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Hely" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "Legyártott készlet helye" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Sorozatszámok automatikus hozzárendelése" + +#: build/serializers.py:316 +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:331 +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/serializers.py:356 stock/api.py:1031 +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:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "A gyártási kimenetek listáját meg kell adni" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Állapot" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Kimenetek befejezése akkor is ha a készlet nem\n" +msgstr "" +"Kimenetek befejezése akkor is ha a készlet nem\n" "lett teljesen lefoglalva" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" -msgstr "Lefoglalt készlet levonása" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Az összes lefoglalt tétel levonása a készletről" +#: build/serializers.py:613 +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:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:653 +#: build/serializers.py:681 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:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:752 +#: build/serializers.py:788 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:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part ugyanarra az alkatrészre kell mutasson mint a gyártási utasítás" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:871 +#: build/serializers.py:907 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:878 +#: build/serializers.py:914 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:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:974 +#: build/serializers.py:1010 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:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:980 +#: build/serializers.py:1016 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:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "Nem sikerült az automatikus lefoglalás feladatot elindítani" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Lefoglalt készlet" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Rendelve" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Függőben" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Folyamatban" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Törölve" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Kész" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "A gyártási utasításhoz készlet szükséges" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Késésben lévő gyártás" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" @@ -1823,18 +1675,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Még nincs lefoglalva a szükséges készlet" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Cél dátum" @@ -1847,7 +1699,7 @@ msgstr "Ez a gyártás %(target)s-n volt esedékes" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1861,42 +1713,42 @@ msgid "Completed Outputs" msgstr "Befejezett kimenetek" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Vevői rendelés" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Kiállította" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Prioritás" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "Gyártási utasítás törlése" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "Gyártási utasítás QR kódja" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "Vonalkód gyártáshoz rendelése" @@ -1912,8 +1764,8 @@ msgstr "Készlet forrás" msgid "Stock can be taken from any available location." msgstr "Készlet bármely rendelkezésre álló helyről felhasználható." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Cél" @@ -1927,21 +1779,21 @@ msgstr "Lefoglalt alkatrészek" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 msgid "Batch" -msgstr "" +msgstr "Köteg" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Létrehozva" @@ -1950,7 +1802,7 @@ msgid "No target date set" msgstr "Nincs céldátum beállítva" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Kész" @@ -2002,7 +1854,7 @@ msgstr "Alkatrész rendelés" #: build/templates/build/detail.html:205 msgid "Available stock has been filtered based on specified source location for this build order" -msgstr "" +msgstr "Az elérhető készlet szűrve lett a gyártási rendelés forrás készlethelyére" #: build/templates/build/detail.html:215 msgid "Incomplete Build Outputs" @@ -2044,11 +1896,11 @@ msgstr "Mellékletek" msgid "Build Notes" msgstr "Gyártási megjegyzések" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "Lefoglalás kész" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "Minden sor rendben lefoglalva" @@ -2126,1458 +1978,1485 @@ msgstr "Projekt leírása" msgid "User or group responsible for this project" msgstr "A projektért felelős felhasználó vagy csoport" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Beállítások kulcs (egyedinek kell lennie, nem kis- nagybetű érzékeny)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Beállítás értéke" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "A kiválasztott érték nem egy érvényes lehetőség" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Az érték bináris kell legyen" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Az érték egész szám kell legyen" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Nincs csoport" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Üres domain nem engedélyezett." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Érvénytelen domain név: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Nincsen plugin" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Újraindítás szükséges" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "Egy olyan beállítás megváltozott ami a kiszolgáló újraindítását igényli" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Függőben levő migrációk" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "Függőben levő adatbázis migrációk" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Kiszolgáló példány neve" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "String leíró a kiszolgáló példányhoz" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Példány név használata" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Példány név használata a címsorban" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Verzió infók megjelenítésének tiltása" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Verzió infók megjelenítése csak admin felhasználóknak" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Cég neve" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Belső cégnév" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Kiindulási URL" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "Kiindulási URL a kiszolgáló példányhoz" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Alapértelmezett pénznem" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "Válassz alap pénznemet az ár számításokhoz" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "Árfolyam frissítési gyakoriság" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Milyen gyakran frissítse az árfolyamokat (nulla a kikapcsoláshoz)" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "nap" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "Árfolyam frissítő plugin" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "Kiválasztott árfolyam frissítő plugin" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Letöltés URL-ről" -#: common/models.py:1328 +#: common/models.py:1329 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/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Letöltési méret korlát" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "Maximum megengedett letöltési mérete a távoli képeknek" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "Felhasznált User-agent az URL-ről letöltéshez" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "Erős URL validáció" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "Sablon specifikáció igénylése az URL validálásnál" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Megerősítés igénylése" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Kérjen felhasználói megerősítést bizonyos műveletekhez" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Fa mélység" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Alapértelmezett mélység a fa nézetekben. A mélyebb szintek betöltődnek ha szükségesek." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Frissítés keresés gyakorisága" -#: common/models.py:1369 +#: common/models.py:1370 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/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Automatikus biztonsági mentés" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Adatbázis és média fájlok automatikus biztonsági mentése" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Automata biztonsági mentés gyakorisága" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Hány naponta készüljön automatikus biztonsági mentés" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Feladat törlési gyakoriság" -#: common/models.py:1390 +#: common/models.py:1391 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/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "Hibanapló törlési gyakoriság" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "Hibanapló bejegyzések törlése megadott nap eltelte után" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "Értesítés törlési gyakoriság" -#: common/models.py:1408 +#: common/models.py:1409 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/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "Vonalkód olvasó támogatás engedélyezése a web felületen" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Vonalkód beadási késleltetés" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "Alkatrész változatok" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Alkatrész változat vagy verziószám tulajdonság használata" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrészre is" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "IPN megváltoztatásánsak engedélyezése az alkatrész szerkesztése közben" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "Alkatrész másoláskor az alkatrészjegyzék adatokat is másoljuk alapból" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "Alkatrész másoláskor a paramétereket is másoljuk alapból" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "Alkatrész másoláskor a tesztek adatait is másoljuk alapból" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Sablon" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Gyártmány" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Összetevő" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Értékesíthető" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Követésre kötelezett" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuális" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Importálás megjelenítése a nézetekben" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Import segéd megjelenítése néhány alkatrész nézetben" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Kezdeti készlet adatok" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "Kezdeti készlet létrehozása új alkatrész felvételekor" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Kezdeti beszállítói adatok" -#: common/models.py:1542 +#: common/models.py:1549 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/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "Csak választható mértékegységek" -#: common/models.py:1562 +#: common/models.py:1569 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/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek min. száma" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek minimális száma az árak megjelenítésekor" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek max. száma" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek maximális száma az árak megjelenítésekor" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Beszállítói árazás használata" -#: common/models.py:1586 +#: common/models.py:1593 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/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Beszerzési előzmények felülbírálása" -#: common/models.py:1594 +#: common/models.py:1601 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/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Készlet tétel ár használata" -#: common/models.py:1602 +#: common/models.py:1609 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/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Készlet tétel ár kora" -#: common/models.py:1610 +#: common/models.py:1617 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/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Alkatrészváltozat árak használata" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "Alkatrészváltozat árak megjelenítése az általános árkalkulációkban" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Csak az aktív változatokat" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "Csak az aktív alkatrészváltozatok használata az árazásban" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "Árazás újraszámítás gyakoriság" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "Árak automatikus frissítése ennyi nap után" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Belső árak" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/models.py:1648 +#: common/models.py:1655 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/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Képek felbontása amik átadásra kerülnek címkenyomtató pluginoknak" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Debug mód" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" -msgstr "" +msgstr "Jelentési hibák naplózása" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" -msgstr "" +msgstr "Jelentések generálása közben jelentkező hibák naplózása" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Lapméret" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Teszt riportok engedélyezése" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Teszt riportok előállításának engedélyezése" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Teszt riportok hozzáadása" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Teszt riport nyomtatáskor egy másolat hozzáadása a készlet tételhez" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "A sorozatszámoknak egyedinek kell lennie a teljes készletre vonatkozóan" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Sorozatszámok automatikus kitöltése" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Sorozatszámok automatikus kitöltése a formokon" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" -msgstr "" +msgstr "Alapértelmezett művelet mikor a készlet tétel elfogy" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "Sablon a készlet tételekhez alapértelmezett batch kódok előállításához" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "Napok száma amennyivel a lejárat előtt a készlet tételeket állottnak vesszük" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/models.py:1761 +#: common/models.py:1768 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/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "Beépített készlet megjelenítése" -#: common/models.py:1772 +#: common/models.py:1779 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/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" -msgstr "" +msgstr "Tételek telepítésekor a darabjegyzék ellenőrzése" -#: common/models.py:1779 +#: common/models.py:1786 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/models.py:1792 +msgid "Allow Out of Stock Transfer" msgstr "" -#: common/models.py:1785 +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "Szükséges minta a gyártási utasítás azonosító mező előállításához" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" -msgstr "" +msgstr "Felelős tulajdonos szükséges" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" -msgstr "" +msgstr "Minden rendeléshez felelőst kell rendelni" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "Blokkolás a tesztek sikeres végrehajtásáig" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" +msgstr "Nem lehet gyártási tételt befejezni amíg valamennyi kötelező teszt sikeres nem lett" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "Visszavétel engedélyezése" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "Visszavételek engedélyezése a felületen" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "Visszavétel azonosító minta" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" -msgstr "" +msgstr "Szükséges minta a visszavétel azonosító mező előállításához" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "Befejezett visszavétel szerkesztése" -#: common/models.py:1829 +#: common/models.py:1844 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/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "Szükséges minta a vevői rendelés azonosító mező előállításához" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "Befejezett vevői rendelés szerkesztése" -#: common/models.py:1857 +#: common/models.py:1872 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/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark this order as complete?" +msgid "Mark Shipped Orders as Complete" +msgstr "Rendelés befejezettnek jelölése?" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "Szükséges minta a beszerzési rendelés azonosító mező előállításához" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/models.py:1879 +#: common/models.py:1902 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/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "Beszerzési rendelések automatikus befejezése" -#: common/models.py:1887 +#: common/models.py:1910 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/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése a bejelentkező oldalon" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/models.py:1914 +#: common/models.py:1937 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/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Email szükséges" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "Felhasználó adatainak automatikus kitöltése az SSO fiókadatokból" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "Email kétszer" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "Regisztráláskor kétszer kérdezze a felhasználó email címét" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "Regisztráláskor kétszer kérdezze a felhasználó jelszavát" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/models.py:1948 +#: common/models.py:1971 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/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "Csoport amihez a frissen regisztrált felhasználók hozzá lesznek rendelve" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/models.py:1968 +#: common/models.py:1991 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/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "Plugin frissítések ellenőrzése" -#: common/models.py:1977 +#: common/models.py:2000 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/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "URL útvonalalak hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "Háttérben futó feladatok hozzáadásának engedélyezése a pluginok számára" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "Belső eseményekre reagálás engedélyezése a pluginok számára" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "Projektszámok engedélyezése" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "Projektszámok használatának engedélyezése a projektek követéséhez" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "Leltár funkció" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Leltár funkció engedélyezése a készlet mennyiség és érték számításhoz" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "Külső helyek nélkül" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Külső helyek figyelmen kívül hagyása a leltár számításoknál" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "Automatikus leltár időpontja" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Hány naponta történjen automatikus leltár (nulla egyenlő tiltva)" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "Riport törlési gyakoriság" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Régi leltár riportok törlése hány naponta történjen" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "Felhasználók teljes nevének megjelenítése" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "Felhasználói név helyett a felhasználók teljes neve jelenik meg" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" -msgstr "" +msgstr "Teszt állomás adatok engedélyezése" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" -msgstr "" +msgstr "Tesztállomás adatok gyűjtésének teszt eredménybe gyűjtésének engedélyezése" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Beállítások kulcs (egyedinek kell lennie, nem kis- nagybetű érzékeny" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Nem aktív alkatrészek elrejtése a kezdőlapon" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Értesítésre beállított alkatrészek megjelenítése" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Alkatrész értesítések megjelenítése a főoldalon" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Értesítésre beállított kategóriák megjelenítése" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Alkatrész kategória értesítések megjelenítése a főoldalon" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Legújabb alkatrészek megjelenítése" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Legújabb alkatrészek megjelenítése a főoldalon" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" -msgstr "" +msgstr "Hibás alkatrészjegyzékek megjelenítése" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Jóváhagyásra váró alkatrészjegyzékek megjelenítése a főoldalon" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Legfrissebb készlet változások megjelenítése" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Legutóbb megváltozott alkatrészek megjelenítése a főoldalon" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Alacsony készlet megjelenítése" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Alacsony készletek megjelenítése a főoldalon" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Kimerült készlet megjelenítése" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Kimerült készletek megjelenítése a főoldalon" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Gyártáshoz szükséges készlet megjelenítése" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Gyártáshoz szükséges készletek megjelenítése a főoldalon" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Lejárt készlet megjelenítése" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Lejárt készletek megjelenítése a főoldalon" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Állott készlet megjelenítése" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Álló készletek megjelenítése a főoldalon" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Függő gyártások megjelenítése" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Folyamatban lévő gyártások megjelenítése a főoldalon" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Késésben lévő gyártások megjelenítése" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Késésben lévő gyártások megjelenítése a főoldalon" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "Kintlévő beszerzési rendelések megjelenítése" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "Kintlévő beszerzési rendelések megjelenítése a főoldalon" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Késésben lévő megrendelések megjelenítése" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "Késésben lévő megrendelések megjelenítése a főoldalon" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "Függő vevői rendelések megjelenítése" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "Függő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Késésben lévő vevői rendelések megjelenítése" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "Késésben lévő vevői rendelések megjelenítése a főoldalon" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "Függő vevői szállítmányok megjelenítése" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "Folyamatban lévő vevői szállítmányok megjelenítése a főoldalon" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Hírek megjelenítése" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Hírek megjelenítése a főoldalon" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "Beágyazott címke megjelenítés" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF címkék megjelenítése a böngészőben letöltés helyett" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "Alapértelmezett címkenyomtató" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "Melyik címkenyomtató legyen az alapértelmezett" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "Beágyazott riport megjelenítés" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF riport megjelenítése a böngészőben letöltés helyett" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Alkatrészek keresése" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "Alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "Beszállítói alkatrészek keresése" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "Beszállítói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Gyártói alkatrészek keresése" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "Gyártói alkatrészek megjelenítése a keresési előnézetben" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Inaktív alkatrészek elrejtése" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "Inaktív alkatrészek kihagyása a keresési előnézet találataiból" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "Kategóriák keresése" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "Alkatrész kategóriák megjelenítése a keresési előnézetben" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Készlet keresése" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Készlet tételek megjelenítése a keresési előnézetben" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Nem elérhető készlet tételek elrejtése" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Nem elérhető készlet kihagyása a keresési előnézet találataiból" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Helyek keresése" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "Készlet helyek megjelenítése a keresési előnézetben" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Cégek keresése" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "Cégek megjelenítése a keresési előnézetben" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Gyártási utasítások keresése" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Gyártási utasítások megjelenítése a keresés előnézet ablakban" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Beszerzési rendelések keresése" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "Beszerzési rendelések megjelenítése a keresési előnézetben" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Inaktív beszerzési rendelések kihagyása" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inaktív beszerzési rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Vevői rendelések keresése" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "Vevői rendelések megjelenítése a keresési előnézetben" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "Inaktív vevői rendelések kihagyása" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "Inaktív vevői rendelések kihagyása a keresési előnézet találataiból" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Visszavétel keresése" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "Visszavételek megjelenítése a keresés előnézet ablakban" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "Inaktív visszavételek kihagyása" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "Inaktív visszavételek kihagyása a keresési előnézet találataiból" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "Keresési előnézet eredményei" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "A keresési előnézetben megjelenítendő eredmények száma szekciónként" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Regex keresés" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "Reguláris kifejezések engedélyezése a keresésekben" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "Teljes szó keresés" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "A keresések csak teljes szóra egyező találatokat adjanak" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Mennyiség megjelenítése a formokon" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "Rendelkezésre álló alkatrész mennyiség megjelenítése néhány formon" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "ESC billentyű zárja be a formot" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "ESC billentyű használata a modális formok bezárásához" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Rögzített menüsor" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "A menü pozíciója mindig rögzítve a lap tetején" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Dátum formátum" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Preferált dátum formátum a dátumok kijelzésekor" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Alkatrész ütemezés" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "Alkatrész ütemezési információk megjelenítése" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Alkatrész leltár" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Alkatrész leltár információk megjelenítése (ha a leltár funkció engedélyezett)" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "Táblázati szöveg hossz" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "Maximális szöveg hossz ami megjelenhet a táblázatokban" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "Alapértelmezett alkatrész címke sablon" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "Az alapértelmezetten kiválasztott alkatrész címke sablon" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "Alapértelmezett készlet címke sablon" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "Az alapértelmezetten kiválasztott készlet címke sablon" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "Alapértelmezett készlethely címke sablon" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "Az alapértelmezetten kiválasztott készlethely címke sablon" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" -msgstr "" +msgstr "Alapértelmezett gyártási tétel címke sablon" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" -msgstr "" +msgstr "Az alapértelmezetten kiválasztott gyártási tétel címke sablon" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "Hibariportok fogadása" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "Értesítések fogadása a rendszerhibákról" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" -msgstr "" +msgstr "Utoljára használt nyomtató gépek" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" -msgstr "" +msgstr "Az utoljára használt nyomtató tárolása a felhasználóhoz" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Ár" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3587,135 +3466,135 @@ msgstr "Webhook neve" msgid "Active" msgstr "Aktív" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" -msgstr "" +msgstr "Token" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Titok" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Fejléc" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Törzs" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" -msgstr "" +msgstr "Azonosító" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Cím" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Közzétéve" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Szerző" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Elolvasva" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "Elolvasva?" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Kép" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "Képfájl" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "A mértékegységnek valós azonosítónak kell lennie" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "Egység neve" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Szimbólum" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "Opcionális mértékegység szimbólum" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definíció" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "Mértékegység definíció" @@ -3737,7 +3616,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:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "Készlet érkezett" @@ -3753,63 +3632,63 @@ msgstr "Készlet érkezett vissza egy visszavétel miatt" msgid "Error raised by plugin" msgstr "Plugin hiba" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "Folyamatban" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "Folyamatban lévő feladatok" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "Ütemezett Feladatok" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "Hibás feladatok" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "Feladat ID" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "Egyedi feladat ID" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "Zárol" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "Zárolási idő" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "Feladat neve" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "Funkció" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "Funkció neve" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "Paraméterek" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "Feladat paraméterei" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "Kulcsszó paraméterek" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "Feladat kulcsszó paraméterek" @@ -3853,23 +3732,23 @@ msgstr "Előző lépés" #: company/api.py:164 msgid "Part is Active" -msgstr "" +msgstr "Az alkatrész aktív" #: company/api.py:168 msgid "Manufacturer is Active" -msgstr "" +msgstr "A Gyártó Aktív" #: company/api.py:317 msgid "Supplier Part is Active" -msgstr "" +msgstr "A Szállítói Alkatrész Aktív" #: company/api.py:321 msgid "Internal Part is Active" -msgstr "" +msgstr "A saját alkatrész Aktív" #: company/api.py:325 msgid "Supplier is Active" -msgstr "" +msgstr "A Beszállító Aktív" #: company/models.py:114 msgid "Company description" @@ -3902,9 +3781,9 @@ msgid "Contact email address" msgstr "Kapcsolattartó email címe" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Névjegy" @@ -3918,7 +3797,7 @@ msgstr "Link a külső céginformációhoz" #: company/models.py:160 msgid "Is this company active?" -msgstr "" +msgstr "Ez a vállalat aktív?" #: company/models.py:165 msgid "is customer" @@ -3950,7 +3829,7 @@ msgstr "Cég által használt alapértelmezett pénznem" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Cég" @@ -4042,19 +3921,19 @@ 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:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Kiindulási alkatrész" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Válassz alkatrészt" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4069,15 +3948,15 @@ msgid "Select manufacturer" msgstr "Gyártó kiválasztása" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" -msgstr "" +msgstr "MPN (Gyártói cikkszám)" #: company/models.py:508 msgid "Manufacturer Part Number" @@ -4087,61 +3966,60 @@ msgstr "Gyártói cikkszám" msgid "URL for external manufacturer part link" msgstr "URL link a gyártói alkatrészhez" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "Gyártói alkatrész leírása" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Paraméter neve" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Érték" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Paraméter értéke" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Mértékegység" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Paraméter mértékegység" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "A csomagolási egységnek kompatibilisnek kell lennie az alkatrész mértékegységgel" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" -#: company/models.py:752 +#: company/models.py:753 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:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4149,97 +4027,97 @@ msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészr #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Beszállító" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" -msgstr "" +msgstr "Ez a szállítói termék aktív?" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Gyártói alkatrész kiválasztása" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "URL link a beszállítói alkatrészhez" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Megjegyzés" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "alap költség" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Csomagolás" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Alkatrész csomagolás" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "Csomagolási mennyiség" -#: company/models.py:871 +#: company/models.py:873 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:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "többszörös" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Többszörös rendelés" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "Beszállítónál elérhető mennyiség" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "Elérhetőség frissítve" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "Utolsó elérhetőségi adat frissítés" @@ -4258,7 +4136,7 @@ msgstr "Készleten" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inaktív" @@ -4294,11 +4172,11 @@ msgstr "Cég törlése" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "Alkatrész képe" @@ -4317,15 +4195,15 @@ msgstr "Kép letöltése URL-ről" msgid "Delete image" msgstr "Kép törlése" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4335,10 +4213,10 @@ msgstr "Vevő" msgid "Uses default currency" msgstr "Alapértelmezett pénznemet használja" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Cím" @@ -4347,7 +4225,7 @@ msgid "Phone" msgstr "Telefonszám" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "Kép eltávolítása" @@ -4356,19 +4234,19 @@ msgid "Remove associated image from this company" msgstr "Céghez rendelt kép eltávolítása" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Törlés" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "Kép feltöltése" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "Kép letöltése" @@ -4521,7 +4399,7 @@ msgid "Delete manufacturer part" msgstr "Gyártói alkatrész törlése" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Belső alkatrész" @@ -4531,7 +4409,7 @@ msgstr "Nincs elérhető gyártói információ" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4581,11 +4459,11 @@ msgid "Addresses" msgstr "Címek" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Beszállítói alkatrész" @@ -4631,25 +4509,25 @@ msgid "No supplier information available" msgstr "Nincs elérhető beszállítói információ" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" -msgstr "" +msgstr "SKU (leltári azonosító)" #: company/templates/company/supplier_part.html:206 msgid "Supplier Part Stock" msgstr "Beszállítói készlet" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Új készlet tétel létrehozása" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Új készlet tétel" @@ -4681,13 +4559,13 @@ msgid "Update Part Availability" msgstr "Alkatrész elérhetőség frissítése" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4724,128 +4602,54 @@ msgstr "Cégek" msgid "New Company" msgstr "Új cég" -#: label/api.py:247 -msgid "Error printing label" -msgstr "Címkenyomtatási hiba" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Kiküldve" -#: label/models.py:120 -msgid "Label name" -msgstr "Címke neve" - -#: label/models.py:128 -msgid "Label description" -msgstr "Címke leírása" - -#: label/models.py:136 -msgid "Label" -msgstr "Címke" - -#: label/models.py:137 -msgid "Label template file" -msgstr "Címke sablon fájl" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Engedélyezve" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Címke sablon engedélyezve" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Szélesség [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Címke szélessége, mm-ben" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Magasság [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Címke magassága, mm-ben" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Fájlnév minta" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "Minta a címke fájlnevek előállításához" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "Lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Szűrők" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR kód" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR kód" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "Másolatok" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" -msgstr "" +msgstr "Címkénkénti nyomtatandó mennyiség" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "Csatlakoztatba" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Ismeretlen" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "Nyomtatás" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "Nincs papír" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "Nincs kapcsolat" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "Címkenyomtató" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." -msgstr "" +msgstr "Közvetlen címkenyomtatás különféle tételekre." -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "Nyomtató helye" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" -msgstr "" +msgstr "Nyomtató korlátozása egy készlethelyhez" #: machine/models.py:25 msgid "Name of machine" @@ -4865,19 +4669,19 @@ msgstr "Illesztőprogram" #: machine/models.py:35 msgid "Driver used for the machine" -msgstr "" +msgstr "Berendezéshez használható meghajtó" #: machine/models.py:39 msgid "Machines can be disabled" -msgstr "" +msgstr "A berendezések letilthatók" #: machine/models.py:95 msgid "Driver available" -msgstr "" +msgstr "Meghajtó elérhető" #: machine/models.py:100 msgid "No errors" -msgstr "" +msgstr "Nincsen hiba" #: machine/models.py:105 msgid "Initialized" @@ -4904,63 +4708,64 @@ msgid "Config type" msgstr "Konfiguráció típusa" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Teljes ár" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Rendelés állapota" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "Van árazás" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "Nincs egyező beszerzési rendelés" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Rendelés" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" -msgstr "" +msgstr "A rendelés teljesítve" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" -msgstr "" +msgstr "A rendelés függőben" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Beszerzési rendelés" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Visszavétel" @@ -4977,517 +4782,577 @@ msgstr "Rendelés pénzneme" 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:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "A kapcsolattartó nem egyezik a kiválasztott céggel" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "Rendelés leírása (opcionális)" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "Válassz projektszámot ehhez a rendeléshez" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Link külső weboldalra" -#: order/models.py:299 +#: order/models.py:311 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:313 +#: order/models.py:325 msgid "Created By" msgstr "Készítette" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "Kapcsolattartó ehhez a rendeléshez" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "Cég címei ehhez a rendeléshez" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Rendelés azonosító" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Beszerzési rendelés állapota" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "Cég akitől a tételek beszerzésre kerülnek" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "Beszállítói azonosító" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "Beszállítói rendelés azonosító kód" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "érkeztette" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Kiállítás dátuma" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Kiállítás dátuma" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:545 +#: order/models.py:566 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:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "Mennyiség pozitív kell legyen" -#: order/models.py:911 +#: order/models.py:941 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:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Kiszállítás dátuma" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "szállította" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "A rendelés nem teljesíthető mivel nincs hozzárendelve alkatrész" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Gyártási kimenet már kész" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "A rendelést nem lehet törölni" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 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:1013 +#: order/models.py:1043 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:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:1296 +#: order/models.py:1345 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:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "Sortétel leírása (opcionális)" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "Kontextus" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "törölve" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Beérkezett" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Mit szeretne a vevő hol tároljuk ezt az alkatrészt?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtuális alkatrészt nem lehet vevői rendeléshez adni" -#: order/models.py:1528 +#: order/models.py:1579 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:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Eladási ár" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Kiszállítva" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Szállítási dátum" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "Kézbesítés dátuma" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:1848 +#: order/models.py:1899 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:1851 +#: order/models.py:1902 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:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 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:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Szállítmány nem egyezik a vevői rendeléssel" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Sor" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Tétel" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "Visszavétel azonosító" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "Cég akitől a tételek visszavételre kerülnek" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "Visszavétel állapota" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "Csak szériaszámos tételek rendelhetők visszaszállítási utasításhoz" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "Visszavétel dátuma" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "Mikor lett visszavéve a tétel" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Kimenetel" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "Sortétel végső kimenetele" -#: order/models.py:2242 +#: order/models.py:2302 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/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "Sortételek" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "Kész sorok" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 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:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" +msgstr "Beszerzési ár automatikus számítása a beszállítói alkatrész adatai alapján" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" -msgstr "" +msgstr "Elemek összevonása" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" +msgstr "Azonos forrás és cél dátumú Alkatrész tételeinek összevonása egy tételre" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:506 +#: order/serializers.py:510 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:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "A következő sorozatszámok már ki lettek osztva" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:1684 +#: order/serializers.py:1688 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:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "Sortétel pénzneme" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Elveszett" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Visszaküldve" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Folyamatban" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Visszavétel" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Javítás" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Csere" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Visszatérítés" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Elutasított" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Késésben lévő beszerzés" @@ -5554,7 +5419,7 @@ msgstr "Rendelés teljesítettnek jelölése" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Rendelés befejezése" @@ -5564,13 +5429,13 @@ msgstr "Beszállítói alkatrész bélyegkép" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Rendelés azonosítója" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Rendelés leírása" @@ -5579,19 +5444,19 @@ msgid "No suppplier information available" msgstr "Nincs elérhető beszállítói információ" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "Kész sortételek" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Hiányos" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Kiküldve" @@ -5601,15 +5466,15 @@ msgstr "Teljes költség" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "A teljes költség nem számolható" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "Beszerzési rendelés QR kódja" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "Vonalkód hozzáadása a beszerzési rendeléshez" @@ -5663,11 +5528,11 @@ msgstr "Kijelöltek másolása" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5709,15 +5574,6 @@ msgstr "A rendelést már feldolgozták. Így már nem lehet fájlokat feltölte msgid "Step %(step)s of %(count)s" msgstr "%(step)s/%(count)s. lépés" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "Sortételek" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Beérkezett készlet" @@ -5730,7 +5586,7 @@ msgstr "Beszerzési rendelés tételei" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Sortétel hozzáadása" @@ -5779,30 +5635,30 @@ msgid "Print packing list" msgstr "Csomagolási lista nyomtatása" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "Vevői azonosító" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Teljes költség" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "Visszavétel QR kódja" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "Vonalkód visszavételhez rendelése" @@ -5820,25 +5676,30 @@ msgid "Ship Items" msgstr "Tételek kiszállítása" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Vevői rendelés befejezése, minden kiszállítva" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "Ehhez a vevői rendeléshez nincs minden alkatrész lefoglalva" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "Vevő rendelés QR kódja" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "Vonalkód hozzáadása a vevői rendeléshez" @@ -5882,12 +5743,12 @@ msgstr "A {part} egységára {price}-ra módosítva" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "A {part} alkatrész módosított egységára {price} mennyisége pedig {qty}" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "Alkatrész ID" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Alkatrész neve" @@ -5896,20 +5757,20 @@ msgstr "Alkatrész neve" msgid "Part Description" msgstr "Alkatrész leírása" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" -msgstr "" +msgstr "IPN (Belső Cikkszám)" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Változat" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Kulcsszavak" @@ -5918,15 +5779,15 @@ msgstr "Kulcsszavak" msgid "Part Image" msgstr "Alkatrész ábra" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "Kategória ID" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "Kategória neve" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "Alapértelmezett készlethely ID" @@ -5934,11 +5795,11 @@ msgstr "Alapértelmezett készlethely ID" msgid "Default Supplier ID" msgstr "Alapértelmezett beszállító ID" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimális készlet" @@ -5951,160 +5812,164 @@ msgstr "Felhasználva ebben" msgid "Building" msgstr "Gyártásban" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "Szülő ID" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "Szülő neve" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "Kategória elérési út" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Alkatrészek" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "Alkatrészjegyzék szint" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "Alkatrészjegyzék tétel ID" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "Szülő IPN" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "Alkatrész IPN" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minimum ár" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Maximum ár" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" -msgstr "" +msgstr "Csillagozott" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" -msgstr "" +msgstr "Csillagozottra szűrés" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" -msgstr "" +msgstr "Mélység" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" -msgstr "" +msgstr "Kategória mélységre szűrés" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" -msgstr "" +msgstr "Lépcsőzetes" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" -msgstr "" +msgstr "Szűrt eredmények tartalmazzák az alkategóriákat" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "Szülő" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" -msgstr "" +msgstr "Szülő kategóriára szűrés" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" -msgstr "" +msgstr "Fa kihagyása" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" -msgstr "" +msgstr "Az adott kategória alkategóriáinak kihagyása" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" -msgstr "" +msgstr "Van találat" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "Beérkező beszerzési rendelés" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "Kimenő vevői rendelés" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "Gyártással előállított készlet" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "A gyártási utasításhoz szükséges készlet" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "Érvényes" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "Ennek az opciónak ki kll lennie választva" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Kategória" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" -msgstr "" +msgstr "Használ" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Alapértelmezett hely" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Teljes készlet" @@ -6113,698 +5978,712 @@ msgstr "Teljes készlet" msgid "Input quantity for price calculation" msgstr "Add meg a mennyiséget az árszámításhoz" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Alkatrész kategória" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Alkatrész kategóriák" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Ebben a kategóriában lévő alkatrészek helye alapban" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Szerkezeti" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "A szerkezeti alkatrész kategóriákhoz nem lehet direktben alkatrészeket hozzáadni, csak az alkategóriáikhoz." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Alapértelmezett kulcsszavak" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Ikon" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Ikon (opcionális)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Nem lehet az alkatrészkategóriát szerkezeti kategóriává tenni, mert már vannak itt alkatrészek!" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "Hibás választás a szülő alkatrészre" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, 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:551 +#: part/models.py:594 #, 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:616 +#: part/models.py:659 #, 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:696 +#: part/models.py:739 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:801 +#: part/models.py:844 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:811 +#: part/models.py:854 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:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "Alkatrész leírása (opcionális)" -#: part/models.py:887 +#: part/models.py:930 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:897 +#: part/models.py:940 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: part/models.py:912 +#: part/models.py:955 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:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Alapértelmezett beszállító" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "Alapértelmezett beszállítói alkatrész" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:992 +#: part/models.py:1035 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:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:1017 +#: part/models.py:1060 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:1023 +#: part/models.py:1066 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:1029 +#: part/models.py:1072 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:1035 +#: part/models.py:1078 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:1041 +#: part/models.py:1084 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:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:1051 +#: part/models.py:1094 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:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "Utolsó leltár" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Dátum" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "További megjegyzések" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "Leltározta" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Riport" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "Leltár riport fájl (generált)" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Alkatrész szám" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "Leltározott alkatrészek száma" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "Felhasználó aki a leltár riportot kérte" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" +msgstr "Hibás sablon név - legalább egy alfanumerikus karakter kötelező" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "Teszt sablont csak követésre kötelezett alkatrészhez lehet csinálni" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" -msgstr "" +msgstr "Már létezik ilyen azonosítójú Teszt sablon ehhez az alkatrészhez" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" -msgstr "" +msgstr "Teszt azonosító" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" -msgstr "" +msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3494 -msgid "Is this test enabled?" -msgstr "" +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Engedélyezve" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3537 +msgid "Is this test enabled?" +msgstr "Teszt engedélyezve?" + +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Kötelező" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3506 +#: part/models.py:3549 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:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3513 +#: part/models.py:3556 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:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "Paraméter neve" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "Paraméter leírása" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "Lehetőségek" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "Szülő alkatrész" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Paraméter sablon" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "Adat" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Paraméter értéke" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Alapértelmezett érték" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "Alkatrész ID vagy alkatrész név" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "Egyedi alkatrész ID értéke" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "Alkatrész IPN érték" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "Szint" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "Alkatrészjegyzék szint" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4048 +#: part/models.py:4091 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:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Többlet" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Becsült gyártási veszteség (abszolút vagy százalékos)" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4090 +#: part/models.py:4133 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:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Változatok" -#: part/models.py:4096 +#: part/models.py:4139 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:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 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:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4354 +#: part/models.py:4397 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:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" @@ -6816,19 +6695,19 @@ msgstr "Alkategóriák" #: part/serializers.py:185 msgid "Results" -msgstr "" +msgstr "Eredmények" #: part/serializers.py:186 msgid "Number of results recorded against this template" -msgstr "" +msgstr "Eszerint a sablon szerint rögzített eredmények száma" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" #: part/serializers.py:273 msgid "Number of parts using this template" -msgstr "" +msgstr "Ennyi alkatrész használja ezt a sablont" #: part/serializers.py:397 msgid "No parts selected" @@ -6838,299 +6717,299 @@ msgstr "Nincs kiválasztva alkatrész" msgid "Select category" msgstr "Válassz kategóriát" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Paraméterek másolása" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:480 +#: part/serializers.py:490 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:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:500 +#: part/serializers.py:515 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:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" -msgstr "" +msgstr "Külső raktárkészlet" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" -msgstr "" +msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:880 +#: part/serializers.py:897 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:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Leltár riport korlátozása bizonyos alkatrészre és variánsra" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Leltár riport korlátozása bizonyos alkatrész kategóriára és az alatta lévőkre" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Leltár riport korlátozása bizonyos készlethelyre és az alatta lévőkre" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "Külső készlet nélkül" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "Külső helyeken lévő készlet nélkül" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Riport létrehozása" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "Riport fájl létrehozása a számított leltár adatokkal" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "Alaktrészek frissítése" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "Megadott alkatrészek frissítése a számított leltár adatokkal" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "Leltár funkció nincs engedélyezve" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, 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:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1723 +#: part/serializers.py:1740 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:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1729 +#: part/serializers.py:1746 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:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "Meglévő alkatrészjegyzék törlése" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "Meglévő alkatrészjegyzék tételek törlése a feltöltés előtt" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "Nincs megadva alkatrész oszlop" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "Több egyező alkatrész is található" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "Nincs egyező alkatrész" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "Az alkatrész nem lett összetevőként jelölve" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "Mennyiség nincs megadva" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Érvénytelen mennyiség" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "Legalább egy alkatrészjegyzék tétel szükséges" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "Teljes mennyiség" @@ -7282,7 +7161,7 @@ msgstr "Leltár információ hozzáadása" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "Leltár" @@ -7380,15 +7259,15 @@ msgstr "Alkatrész beszállítók" msgid "Part Manufacturers" msgstr "Alkatrész gyártók" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "Kapcsolódó alkatrész" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "Kapcsolódó alkatrész hozzáadása" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "Teszt eredmény sablon hozzáadása" @@ -7447,7 +7326,7 @@ msgstr "Értesítések kérése erre az alkatrészre" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Címke nyomtatása" @@ -7469,7 +7348,7 @@ msgstr "Készlet számolása" msgid "Transfer part stock" msgstr "Készlet áthelyezése" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "Készlet műveletek" @@ -7518,7 +7397,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Virtuális (nem kézzelfogható alkatrész)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "Alkatrész részletei" @@ -7541,7 +7420,7 @@ msgid "Minimum stock level" msgstr "Minimális készlet" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7564,19 +7443,19 @@ msgstr "Alkatrész QR kódja" msgid "Link Barcode to Part" msgstr "Vonalkód hozzárendelése az alkatrészhez" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "Számítás" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "Alkatrészhez rendelt kép eltávolítása" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "Nincs egyező kép" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "Részletek elrejtése" @@ -7635,8 +7514,8 @@ msgstr "Változatok" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Készlet" @@ -7682,7 +7561,7 @@ msgstr "Szerkesztés" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Utoljára módosítva" @@ -7692,11 +7571,11 @@ msgstr "Árkategória" #: part/templates/part/prices.html:38 part/templates/part/prices.html:128 msgid "Minimum" -msgstr "" +msgstr "Minimum" #: part/templates/part/prices.html:39 part/templates/part/prices.html:129 msgid "Maximum" -msgstr "" +msgstr "Maximum" #: part/templates/part/prices.html:51 part/templates/part/prices.html:174 msgid "Internal Pricing" @@ -7754,7 +7633,7 @@ msgid "Update Pricing" msgstr "Árazás Frissítése" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7834,7 +7713,7 @@ msgstr "Az alkatrész képe nem található" msgid "Part Pricing" msgstr "Alkatrész árak" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "Plugin nem törölhető mivel még aktív" @@ -7900,8 +7779,8 @@ msgstr "Vonalkód nem egyezik egy létező készlet tétellel sem" msgid "Stock item does not match line item" msgstr "Készlet tétel nem egyezik a sortétellel" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Nincs elegendő" @@ -7995,21 +7874,21 @@ msgstr "Szállítmány kiszállítva" msgid "Quantity to allocate" msgstr "Lefoglalandó mennyiség" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "Címkenyomtatás sikertelen" -#: plugin/base/label/mixins.py:63 +#: 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:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "A címke HTML nyomtatása sikertelen" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" -msgstr "A címke PNG nyomtatása sikertelen" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" +msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" @@ -8022,7 +7901,7 @@ msgstr "Alapvető vonalkód támogatást ad" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8076,35 +7955,35 @@ msgstr "InvenTree Pénzváltó" msgid "Default currency exchange integration" msgstr "Alapértelmezett pénzváltó integráció" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF címkenyomtató" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 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:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "Debug mód" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug mód engedélyezése - nyers HTML-t ad vissza PDF helyett" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" -msgstr "" +msgstr "InvenTree címkenyomtató" #: plugin/builtin/labels/inventree_machine.py:62 msgid "Provides support for printing using a machine" -msgstr "" +msgstr "Nyomtatási támogatást nyújt egy Berendezés által" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "utoljára használva" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "Opciók" @@ -8128,7 +8007,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:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "Fekvő" @@ -8144,11 +8023,11 @@ msgstr "Inventree Címke Ív Nyomtató" msgid "Arrays multiple labels onto a single sheet" msgstr "Több címke egy ívre helyezése" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "Címke túl nagy a lapmérethez képest" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "Nem készült címke" @@ -8206,7 +8085,7 @@ msgstr "Csak a személyzeti felhasználók adminisztrálhatják a pluginokat" #: plugin/installer.py:197 msgid "Plugin installation is disabled" -msgstr "" +msgstr "Plugin telepítés letiltva" #: plugin/installer.py:248 msgid "Installed plugin successfully" @@ -8231,7 +8110,7 @@ msgstr "Plugin csomag neve nem található" #: plugin/installer.py:299 msgid "Plugin uninstalling is disabled" -msgstr "" +msgstr "Plugin eltávolítás letiltva" #: plugin/installer.py:303 msgid "Plugin cannot be uninstalled as it is currently active" @@ -8241,61 +8120,62 @@ msgstr "Plugin nem eltávolítható mivel még aktív" msgid "Uninstalled plugin successfully" msgstr "Plugin eltávolítása sikeres" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "Plugin beállítás" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "Plugin beállítások" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "Kulcs" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "Plugin kulcsa" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "PluginNeve a pluginnak" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "Csomag neve" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "A telepített csomag neve, ha a plugin a PIP-el lett telepítve" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "Aktív-e a plugin" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Beépítve" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "Példa plugin" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Beépített plugin" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "Csomag plugin" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" -msgstr "" +msgstr "Bővítmény" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "Módszer" @@ -8303,17 +8183,17 @@ msgstr "Módszer" msgid "No author found" msgstr "Nincs szerző" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "A '{p}' plugin nem kompatibilis az aktuális applikáció verzióval {v}" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "A pluginhoz minimum {v} verzió kell" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "A pluginhoz maximum {v} verzió kell" @@ -8396,279 +8276,363 @@ msgstr "Tlepítés nincs megerősítve" msgid "Either packagename of URL must be provided" msgstr "Vagy csomag nevet vagy URL-t meg kell adni" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "Teljes újratöltés" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "A plugin tárolók teljes újratöltése" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "Kényszerített újratöltés" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Akkor is töltse újra a plugin tárolót ha már be lett töltve" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "Pluginok begyűjtése" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "Pluginok begyűjtése és a tárolóhoz adása" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "Plugin aktiválása" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "Plugin bekapcsolása" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "Konfiguráció törlése" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "Plugin konfiguráció törlése az adatbázisból" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Nincs érvényes objektum megadva a sablonhoz" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "Tételek" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "Címkenyomtatási hiba" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "A '{template}' sablon fájl hiányzik vagy nem érhető el" -#: report/api.py:319 -msgid "Test report" -msgstr "Teszt riport" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" -msgstr "" +msgstr "A4" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" -msgstr "" +msgstr "A3" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "Jogi információk" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "„Letter” méret" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Sablon neve" -#: report/models.py:183 -msgid "Report template file" -msgstr "Riport sablon fájl" +#: report/models.py:156 +msgid "Template description" +msgstr "" -#: report/models.py:190 -msgid "Report template description" -msgstr "Riport sablon leírása" +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "Riport verziószáma (automatikusan nő)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Fájlnév minta" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Szűrők" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "Lapméret a PDF riportokhoz" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "Jelentés fekvő nézetben" -#: report/models.py:318 -msgid "Pattern for generating report filenames" -msgstr "Minta a riport fájlnevek előállításához" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Szélesség [mm]" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "Riport sablon engedélyezve" +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Címke szélessége, mm-ben" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "Készlet lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Magasság [mm]" -#: report/models.py:354 -msgid "Include Installed Tests" -msgstr "Beépített tesztekkel együtt" +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Címke magassága, mm-ben" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" -msgstr "Gyártmányba beépített készlet tételek teszt eredményeivel együtt" - -#: report/models.py:424 -msgid "Build Filters" -msgstr "Gyártás szűrők" - -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "Gyártás lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok" - -#: report/models.py:464 -msgid "Part Filters" -msgstr "Alkatrész szűrők" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "Alkatrész lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok" - -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "Megrendelés lekérdezés szűrők" - -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "Vevő rendelés lekérdezés szűrők" - -#: report/models.py:569 -msgid "Return order query filters" -msgstr "Visszavétel lekérdezés szűrők" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:648 +#: report/models.py:444 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "Haladás" + +#: report/models.py:448 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:456 +msgid "Report Template" +msgstr "" + +#: report/models.py:463 report/models.py:486 +msgid "Output File" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" +msgstr "" + +#: report/models.py:475 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 msgid "Snippet" msgstr "Részlet" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "Riport részlet fájl" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "Részlet fájl leírása" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "Eszköz" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "Riport asset fájl" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "Asset fájl leírása" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" -msgstr "készlethely lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "Címke sablon választás" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR kód" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR kód" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Szükséges alapanyagok" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "Szükséges ehhez" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "Beszállító törölve lett" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Egységár" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "Egyéb tételek" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "Összesen" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Sorozatszám" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Készlethely tételek" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "Készlet tétel teszt riport" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "Teszt eredmények" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "Teszt" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Eredmény" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "Sikeres" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "Sikertelen" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "Nincs eredmény (szükséges)" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "Nincs eredmény" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Beépített tételek" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Sorozatszám" @@ -8725,7 +8689,7 @@ msgstr "Beszállító neve" msgid "Customer ID" msgstr "Vevő ID" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Beépítve ebbe" @@ -8750,555 +8714,723 @@ msgstr "Felülvizsgálat szükséges" msgid "Delete on Deplete" msgstr "Törlés ha kimerül" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "Lejárati dátum" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" -msgstr "" +msgstr "Hely mélységre szűrés" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" -msgstr "" +msgstr "Szűrt eredmények tartalmazzák az alhelyeket" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" -msgstr "" +msgstr "Szülő hely" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" -msgstr "" +msgstr "Szülő helyre szűrés" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Külső hely" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "Alkatrész fa" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "Lejárat előtt" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Állott" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "Mennyiség megadása kötelező" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "Egy érvényes alkatrészt meg kell adni" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "A megadott beszállítói alkatrész nem létezik" -#: stock/api.py:938 +#: stock/api.py:974 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:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sorozatszámot nem lehet megadni nem követésre kötelezett alkatrész esetén" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "Készlethely típus" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "Készlethely típusok" -#: stock/models.py:90 +#: stock/models.py:86 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:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Készlet hely" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Készlethelyek" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Tulajdonos" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Tulajdonos kiválasztása" -#: stock/models.py:167 +#: stock/models.py:175 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:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Külső" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "Ez egy külső készlethely" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Helyszín típusa" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "Tárolóhely típus" -#: stock/models.py:254 +#: stock/models.py:262 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:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" -#: stock/models.py:670 +#: stock/models.py:687 #, 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:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 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:683 +#: stock/models.py:700 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:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "A tétel nem tartozhat saját magához" -#: stock/models.py:712 +#: stock/models.py:729 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:725 +#: stock/models.py:742 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:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Szülő készlet tétel" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "Kiindulási alkatrész" -#: stock/models.py:763 +#: stock/models.py:780 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:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 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:794 +#: stock/models.py:811 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:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Felhasználva ebben" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "Felhasználva ebben a gyártásban" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:885 +#: stock/models.py:902 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:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:924 +#: stock/models.py:941 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:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1479 +#: stock/models.py:1504 #, 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:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "A sorozatszám egész számok listája kell legyen" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" -msgstr "" +msgstr "Ez a Teszt sablon nem létezik" -#: stock/models.py:1613 +#: stock/models.py:1638 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:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:1648 +#: stock/models.py:1673 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:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:1870 +#: stock/models.py:1905 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:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "Tesztek megjegyzései" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "Teszt állomás" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" -msgstr "" +msgstr "A tesztet elvégző tesztállomás azonosítója" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "Elkezdődött" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "A teszt indításának időpontja" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "Befejezve" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "A teszt befejezésének időpontja" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" -msgstr "" +msgstr "Az eredmény Teszt sablonja" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" -msgstr "" +msgstr "Sablon azonosító vagy Teszt név szükséges" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" -msgstr "" +msgstr "A tesztet nem lehet a kezdésnél hamarabb befejezni" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "Szériaszám túl nagy" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Csomagolási mennyiség használata: a megadott mennyiség ennyi csomag" -#: stock/serializers.py:402 +#: stock/serializers.py:531 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:464 +#: stock/serializers.py:593 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:477 +#: stock/serializers.py:606 #, 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:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "Beépítendő mennyiség" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "Adja meg a beépítendő mennyiséget" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "A beépítendő mennyiség legalább 1 legyen" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:620 +#: stock/serializers.py:749 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:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:720 +#: stock/serializers.py:849 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:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "Cél hely a visszatérő tételeknek" -#: stock/serializers.py:788 +#: stock/serializers.py:917 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:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 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:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 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:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "Nincs változás" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "Készlet tétel státusz kódja" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "Rendben" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Ellenőrizendő" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Sérült" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Megsemmisült" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Elutasított" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Karanténban" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Örökölt készlet követési bejegyzés" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Készlet tétel létrehozva" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Szerkeszett készlet tétel" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Hozzárendelt sorozatszám" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Készlet leleltározva" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Készlet manuálisan hozzáadva" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Készlet manuálisan elvéve" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Hely megváltozott" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Készletadatok frissítve" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Gyártmányba beépült" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Gyártmányból eltávolítva" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Beépült összetevő tétel" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Eltávolított összetevő tétel" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Szülő tételből szétválasztva" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Szétválasztott gyermek tétel" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Összevont készlet tétel" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Alkatrészváltozattá alakítva" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Gyártási utasítás kimenete elkészült" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Gyártási utasítás kimenete kész" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Gyártási utasítás kimenete elutasítva" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Gyártásra felhasználva" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Vevői rendelésre kiszállítva" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Megrendelésre érkezett" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Visszavéve" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Vevőnek kiszállítva" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Vevőtől visszaérkezett" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "Készlettörténeti információk" @@ -9320,7 +9452,7 @@ msgstr "Teszt adatok" msgid "Test Report" msgstr "Teszt riport" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "Teszt adatok törlése" @@ -9340,11 +9472,11 @@ msgstr "Beépített készlet tételek" msgid "Install Stock Item" msgstr "Készlet tétel beépítése" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "Készlet tétel összes teszt eredményének törlése" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "Teszt eredmény hozzáadása" @@ -9367,17 +9499,17 @@ msgid "Stock adjustment actions" msgstr "Készlet módosítási műveletek" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Leltározás" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "Készlet növelése" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "Készlet csökkentése" @@ -9386,12 +9518,12 @@ msgid "Serialize stock" msgstr "Sorozatszámok előállítása" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Készlet áthelyezése" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "Vevőhöz rendelése" @@ -9432,7 +9564,7 @@ msgid "Delete stock item" msgstr "Készlet tétel törlése" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Gyártás" @@ -9498,7 +9630,7 @@ msgid "Available Quantity" msgstr "Elérhető mennyiség" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Nincs beállítva hely" @@ -9529,40 +9661,40 @@ msgstr "Ez a készlet tétel lejár %(item.expiry_date)s-n" msgid "No stocktake performed" msgstr "Még nem volt leltározva" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "készlet tétel" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "Készlet állapot szerkesztése" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "Készlet tétel QR kódja" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "Vonalkód hozzárendelése a készlet tételhez" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "Válassz a lenti alkatrész változatok közül" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Figyelem" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "Ez a művelet nem vonható vissza könnyen" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "Készlet tétel konvertálása" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "Visszavétel készletre" @@ -9626,28 +9758,32 @@ msgstr "Hely tulajdonosa" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Úgytűnik nem vagy ennek a készlethelynek a tulajdonosa. Ezt így nem tudod módosítani." -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Új készlet hely létrehozása" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Új hely" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "készlet hely" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "Készlet tároló bevételezve erre a helyre" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "Készlet hely QR kódja" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "Vonalkód hozzárendelése a készlet helyhez" @@ -9719,7 +9855,7 @@ msgstr "Az oldal jelenleg karbantartás alatt van, hamarosan újra használható #: templates/InvenTree/index.html:7 msgid "Index" -msgstr "" +msgstr "Index" #: templates/InvenTree/index.html:39 msgid "Subscribed Parts" @@ -9873,12 +10009,12 @@ msgstr "Belépési beállítások" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Kimenő email nincs beállítva. Néhány bejelentkezési és regisztrációs funkció nem fog megfelelően működni!" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Regisztráció" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "Single Sign On (SSO)" @@ -9898,7 +10034,7 @@ msgstr "Az alap URL-je ennek a pluginnak unknown on unknown" msgstr "ismeretlen az ismeretlenre" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "ismeretlen" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "IP cím" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Eszköz" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Legutóbbi tevékenységek" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s óta (ez a munkamenet)" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s óta" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "Biztosan törölni szeretnéd a kiválasztott email címet?" @@ -10608,26 +10744,26 @@ msgstr "Megerősítés" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Ez az email megerősítő link lejárt vagy hibás. Klikk ide az új megerősítési kérelem elküldéséhez." -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Bejelentkezés" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "Még nem vagy regisztrálva?" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Regisztráció" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Elfelejtett jelszó?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "vagy jelentkezz be a" @@ -10828,7 +10964,7 @@ msgid "The following parts are low on required stock" msgstr "A következő alkatrészek szükséges készlete alacsony" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Szükséges mennyiség" @@ -10842,7 +10978,7 @@ msgid "Click on the following link to view this part" msgstr "Klikk a következő linkre az alkatrész megjelenítéséhez" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "Minimum mennyiség" @@ -11007,7 +11143,7 @@ msgstr "Ez törli a vonalkód hozzárendelést" msgid "Unlink" msgstr "Leválasztás" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "Készlet tétel törlése" @@ -11197,7 +11333,7 @@ msgstr "Alkatrészjegyzék betöltése az al-gyártmányhoz" msgid "Substitutes Available" msgstr "Vannak helyettesítők" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "Készletváltozatok engedélyezve" @@ -11217,30 +11353,30 @@ msgstr "Alkatrészjegyzék árazása nem teljes" msgid "No pricing available" msgstr "Nincsenek árak" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "Külső raktárkészlet" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "Nincs szabad" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "Változatokkal és helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "Változatokkal együtt" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "Helyettesítőkkel együtt" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "Fogyóeszköz tétel" @@ -11272,7 +11408,7 @@ msgstr "Alkatrészjegyzék megtekintése" msgid "No BOM items found" msgstr "Nem találhatók alkatrészjegyzék tételek" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "Szükséges alkatrész" @@ -11441,207 +11577,207 @@ msgstr "Gyártási kimenetek törlése" msgid "No build order allocations found" msgstr "Nincs gyártási utasításhoz történő foglalás" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "Lefoglalt mennyiség" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "Hely nincs megadva" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "Kimenetek befejezése" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "Kimenetek selejtezése" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "Kimenetek törlése" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "gyártás kimenet" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "gyártás kimenetek" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "Gyártási kimenet műveletei" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "Nem található aktív gyártási kimenet" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "Lefoglalt sorok" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "Szükséges tesztek" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "Válassz alkatrészeket" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "Legalább egy alkatrész választása szükséges a foglaláshoz" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "Minden alkatrész lefoglalva" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "Minden kiválasztott alkatrész teljesen lefoglalva" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "Válassz forrás helyet (vagy hagyd üresen ha bárhonnan)" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "Készlet foglalása a gyártási utasításhoz" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "Nincs egyező készlethely" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "Nincs egyező készlet" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "Automatikus készlet foglalás" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "A készlet automatikusan lefoglalásra kerül ehhez a gyártási utasításhoz, a következő feltételek szerint" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "Ha egy készlet hely meg van adva, akkor készlet csak arról a helyről lesz foglalva" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "Ha a készlet helyettesíthetőnek minősül, akkor az első rendelkezésre álló helyről lesz lefoglalva" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "Ha a helyettesítő készlet engedélyezve van, akkor ott az lesz használva ha az elsődleges alkatrésznek nincs készlete" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "Készlet tételek foglalása" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "Nincs a lekérdezéssel egyező gyártási utasítás" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "Kiválaszt" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "Gyártás késésben van" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "Haladás" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "Nincs felhasználói információ" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "Készlet foglalások szerkesztése" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "Készlet foglalások törlése" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "Foglalás szerkesztése" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "Foglalás törlése" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "gyártás sor" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "gyártás sorok" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "Nincsenek gyártási sorok" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "Követésre kötelezett alkatrész" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "Mennyiségi egység" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "Van elegendő" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "Fogyóeszköz tétel" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "Követett tétel" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "Egyedileg nyilvántartott tételek lefoglalása egyedi gyártási kimenetekhez" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "Gyártási készlet" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "Készlet rendelés" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "Lefoglalt készlet" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "Készlet foglalások törlése" @@ -11887,12 +12023,12 @@ msgid "Delete price break" msgstr "Ársáv törlése" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "igaz" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "hamis" @@ -11924,7 +12060,7 @@ msgstr "Új szűrő hozzáadása" msgid "Clear all filters" msgstr "Összes szűrő törlése" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "Szűrő létrehozása" @@ -11957,32 +12093,32 @@ msgstr "Form nyitva tartása" msgid "Enter a valid number" msgstr "Adj meg egy érvényes számot" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Form hibák vannak" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "Nincs találat" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "Keresés" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "Bevitel törlése" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "Fájl oszlop" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "Mező név" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "Oszlopok kiválasztása" @@ -12006,51 +12142,15 @@ msgstr "Hamis" msgid "No parts required for builds" msgstr "Nem szükséges alkatrész a gyártáshoz" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "Tételek kiválasztása" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "Nincs tétel kiválasztva a nyomtatáshoz" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "Nem található címke" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "Nem található címke sablon a kiválasztott tételekhez" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "kiválasztva" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "Nyomtatási beállítások" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "Címke nyomtatása" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "Címkék nyomtatása" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "Nyomtatás" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "Címke sablon választás" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "Plugin választás" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "Címkék nyomtatónak elküldve" @@ -12168,7 +12268,7 @@ msgid "Delete Line" msgstr "Sor törlése" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "Nem találhatók sortételek" @@ -12406,19 +12506,19 @@ msgid "Delete Part Parameter Template" msgstr "Alkatrész paraméter sablon törlése" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "Nem található beszerzési rendelés" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "Ez a sortétel késésben van" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "Sortétel bevételezése" @@ -12430,7 +12530,7 @@ msgstr "Alkatrész kapcsolatok törlése" msgid "Delete Part Relationship" msgstr "Alkatrész kapcsolatok törlése" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "Nincs alkatrész" @@ -12446,101 +12546,101 @@ msgstr "Alkatrész kategória beállítása" msgid "Set category" msgstr "Kategória beállítása" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "alkatrész" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "alkatrészek" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "Nincs kategória" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Megjelenítés listaként" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "Megjelenítés rácsnézetként" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "Nem találhatóak alkategóriák" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "Megjelenítés fában" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "Alkategóriák betöltése" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "Értesítésre beállított kategória" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "Nincs a lekérdezéssel egyező teszt sablon" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "találat" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "Teszt eredmény törlése" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "Ez a teszt a szülő alkatrészhez lett felvéve" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "Teszt eredmény sablon szerkesztése" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "Teszt eredmény sablon törlése" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "Nincs megadva dátum" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "A megadott dátum a múltban van" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "Spekulatív" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "Az alkatrészhez nem áll rendelkezésre ütemezési információ" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "Hiba az alkatrész ütemezési információinak betöltésekor" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "Ütemezett készlet mennyiség" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "Maximum mennyiség" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "Minimális készlet" @@ -12666,7 +12766,7 @@ msgstr "Beszerzési rendelés befejezése" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "Rendelés befejezettnek jelölése?" @@ -12679,7 +12779,6 @@ msgid "This order has line items which have not been marked as received." msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem érkeztek be." #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "A rendelés befejezettnek jelölésével annak adatai és sortételei a továbbiakban már nem lesznek szerkeszthetők." @@ -12726,7 +12825,7 @@ msgstr "Hozzáadás beszerzési rendeléshez" #: templates/js/translated/purchase_order.js:755 msgid "Merge" -msgstr "" +msgstr "Összevonás" #: templates/js/translated/purchase_order.js:859 msgid "No matching supplier parts" @@ -12737,12 +12836,12 @@ msgid "No matching purchase orders" msgstr "Nincsenek egyező beszerzési rendelések" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "Sortételek kiválasztása" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "Legalább egy sortételt ki kell választani" @@ -12791,7 +12890,7 @@ msgid "Quantity to Receive" msgstr "Érkező mennyiség" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "Bevételezés megerősítése" @@ -12811,82 +12910,67 @@ msgstr "Beérkezett tétel vonalkódjának leolvasása (egyik meglévő készlet msgid "Invalid barcode data" msgstr "Érvénytelen vonalkód adat" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "Rendelés késésben" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "Tételek" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "Az összes kijelölt sortétel törlésre kerül" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "Töröljük a kiválasztott sortételeket?" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "Sortétel másolása" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "Sortétel szerkesztése" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "Sortétel törlése" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "Sortétel másolása" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "Sortétel szerkesztése" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "Sortétel törlése" -#: templates/js/translated/report.js:63 -msgid "items selected" -msgstr "kiválasztott tételek" +#: templates/js/translated/report.js:49 +msgid "Print Report" +msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" -msgstr "Riport sablon kiválasztása" +#: templates/js/translated/report.js:68 +msgid "Report print successful" +msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "Teszt riport sablon kiválasztása" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "Nem található riport" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" -msgstr "Nem található riport sablon a kiválasztott tételekhez" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" +msgstr "" #: templates/js/translated/return_order.js:60 #: templates/js/translated/sales_order.js:86 @@ -12917,25 +13001,25 @@ msgstr "Visszavétel törlése" msgid "Complete Return Order" msgstr "Visszavétel befejezése" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "Nem található visszavétel" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "Érvénytelen vevő" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "Visszavétel tételeinek bevételezése" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "Nincs egyező sortétel" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "Tétel bevételezve" @@ -12979,140 +13063,156 @@ msgstr "Függő szállítmányok kiszállítása" msgid "Skip" msgstr "Kihagyás" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "Ez a rendelés olyan sortételeket tartalmaz amik még nem teljesítettek." -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "Vissza lett igazolva ez a vevői rendelés?" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "Vevői rendelés visszaigazolása" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "Vevő rendelés törlése" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "A rendelés törlésével annak adatai a továbbiakban már nem lesznek szerkeszthetők." -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "Szállítmány létrehozása" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "Nem található vevői rendelés" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "Szállítmány szerkesztése" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "Szállítmány kiszállítása" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "Szállítmány törlése" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "Szállítmány szerkesztése" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "Szállítmány törlése" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "Nincs egyező szállímány" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "Szállítmány azonosító" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "Nincs kiszállítva" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "Nyomkövetés" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "Számla" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "Szállítmány hozzáadása" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "Készlet foglalás megerősítése" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "Készlet foglalása a vevői rendeléshez" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "Nincs vevői rendeléshez történő foglalás" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "Készlet foglalások szerkesztése" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "Törlési művelet megerősítése" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "Készlet foglalások törlése" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "Vevőnek kiszállítva" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "Készlethely nincs megadva" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "Sorozatszámok kiosztása" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "Készletrendelés" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "Árszámítás" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "Nem törölhető mivel a tételek ki lettek szállítva" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "Nem törölhető mivel tételek vannak lefoglalva" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "Sorozatszámok kiosztása" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "Egységár módosítása" @@ -13320,7 +13420,7 @@ msgstr "Kivesz" msgid "Add Stock" msgstr "Készlet növelése" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Hozzáad" @@ -13328,180 +13428,180 @@ msgstr "Hozzáad" msgid "Delete Stock" msgstr "Készlet törlése" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "Egyedi követésre kötelezett tételeknél a menyiség nem módosítható" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "Készlet mennyiség megadása" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "Készlet tételek kiválasztása" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "Válassz legalább egy rendelkezésre álló készlet tételt" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "Készlet módosítás jóváhagyása" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "SIKER" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "SIKERTELEN" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "NINCS EREDMÉNY" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "Teszt sikeres" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "Teszt eredmény hozzáadása" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "Nincs teszt eredmény" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "Teszt dátuma" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "Teszt elkezdődött" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "Teszt befejezve" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "Teszt eredmény szerkesztése" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "Teszt eredmény törlése" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "Gyártásban" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "Beépítve készlet tételbe" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "Vevő rendeléshez hozzárendelve" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "Nincs hely megadva" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "Készlet állapot módosítása" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "Készlet összevonása" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "Készlet törlése" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "készlet tételek" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "Beolvasás helyre" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "Készlet műveletek" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "Beépített tételek betöltése" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "Készlet tétel gyártás alatt" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "Készlet tétel hozzárendelve egy vevői rendeléshez" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "Egyedi követésre kötelezett készlet tétel lefoglalva" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "Készlet tétel teljes egészében lefoglalva" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "Készlet tétel részben lefoglalva" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "Készlet tétel beépítve egy másikba" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "Készlet tétel fel lett használva egy gyártásban" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "Készlet tétel lejárt" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "Készlet tétel hamarosan lejár" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "Készlet tétel elutasítva" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "Készlet tétel elveszett" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "Készlet tétel megsemmisült" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "Kimerült" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "Beszállítói alkatrész nincs megadva" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "Készletérték" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "Nincs a lekérdezésnek megfelelő készlet tétel" @@ -13960,7 +14060,7 @@ msgstr "Új értesítések" #: templates/navbar.html:144 users/models.py:201 msgid "Admin" -msgstr "" +msgstr "Adminisztrátor" #: templates/navbar.html:148 msgid "Logout" @@ -13974,6 +14074,22 @@ msgstr "Mentés" msgid "Show all notifications and history" msgstr "Összes értesítés és előzmény megjelenítése" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "Platform UI - az InvenTree új felhasználói felülete - még modernebb adminisztrációs lehetőséget biztosít." + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "Platform UI - az InvenTree új felhasználói felülete - készen áll a tesztelésre." + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "Próbáld ki most" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "itt" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Nincs QR kód adat megadva" @@ -14049,11 +14165,11 @@ msgstr "A kiválasztott SSO kiszolgáló érvénytelen, vagy nincs megfelelően #: templates/socialaccount/signup.html:11 #, python-format msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." -msgstr "" +msgstr "A %(provider_name)s fiókoddal fogsz belépni a %(site_name)s-re." #: templates/socialaccount/signup.html:13 msgid "As a final step, please complete the following form" -msgstr "" +msgstr "Utolsó lépésként kérjük válaszoljon az alábbi kérdésekre" #: templates/socialaccount/snippets/provider_list.html:26 msgid "Provider has not been configured" @@ -14165,7 +14281,7 @@ msgstr "A token lejárt" #: users/models.py:81 msgid "API Token" -msgstr "" +msgstr "API Token" #: users/models.py:82 msgid "API Tokens" @@ -14195,35 +14311,34 @@ msgstr "Token utolsó használata" msgid "Revoked" msgstr "Visszavonva" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Jogosultságok" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Csoport" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Nézet" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Jogosultság tételek megtekintéséhez" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Jogosultság tételek hozzáadásához" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Módosítás" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Jogosultság tételek szerkesztéséhez" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Jogosultság tételek törléséhez" - diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index a01f3f9512..15cae35579 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:20\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Pengguna tidak memiliki izin untuk melihat model ini" @@ -56,26 +56,26 @@ msgstr "Detail terkait galat dapat dilihat di panel admin" msgid "Enter date" msgstr "Masukkan tanggal" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Catatan" @@ -132,7 +132,7 @@ msgstr "Domain surel yang diberikan tidak perbolehkan." msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turki" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnam" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "Surel" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "File tidak ditemukan" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Tautan eksternal tidak ditemukan" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Lampiran" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Pilih file untuk dilampirkan" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Tautan" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Tautan menuju URL eksternal" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Komentar" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Komentar file" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Pengguna" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "tanggal diunggah" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Nama file tidak boleh kosong" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Direktori lampiran tidak valid" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Nama file mengandung karakter yang tidak diperkenankan '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Nama file tidak memiliki ekstensi" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Lampiran dengan nama file ini sudah ada" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Kesalahan merubah nama file" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Pilihan tidak valid" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Keterangan" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "induk" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Direktori" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Data Barcode" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Data barcode pihak ketiga" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Hash unik data barcode" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Sudah ada barcode yang sama" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Terjadi Kesalahan Server" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL file gambar external" msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "Pengecekan kesehatan sistem InvenTree gagal" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Diletakkan" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Selesai" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Dibatalkan" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Hilang" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Dikembalikan" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Dikirim" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Butuh perhatian" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Rusak" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Hancur" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Ditolak" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Item stok dibuat" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Item stok diubah" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Nomor seri yang ditetapkan" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Stok terhitung" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Stok yang ditambahkan manual" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Stok yang dikurangi manual" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Lokasi berubah" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Dirakit ke" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Diambil dari" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Komponen terpasang" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Komponen terlepas" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Dipisah dari item induk" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Pisah item dari barang induk" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Stok item digabungkan" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Dikonversi ke variasi" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Output order produksi dibuat" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Order output produksi selesai" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Terpakai oleh order produksi" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Terkirim ke pelanggan" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Dikembalikan pelanggan" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Produksi" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "Informasi Sistem" msgid "About InvenTree" msgstr "Tentang InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Order Produksi" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Order Produksi" msgid "Build Orders" msgstr "Order Produksi" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Pilihan produksi induk tidak valid" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referensi" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Produksi Induk" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Produksi induk dari produksi ini" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Bagian" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Pilih bagian untuk diproduksi" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Referensi Order Penjualan" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Order penjualan yang teralokasikan ke pesanan ini" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Lokasi Sumber" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Lokasi Tujuan" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Pilih lokasi di mana item selesai akan disimpan" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Jumlah Produksi" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Jumlah item stok yang akan dibuat" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Item selesai" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Jumlah stok item yang telah diselesaikan" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Status pembuatan" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Tanggal Pembuatan" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Target tanggal selesai" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Tanggal selesai" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "diselesaikan oleh" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Diserahkan oleh" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Penanggung Jawab" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Alokasikan nomor seri secara otomatis" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Daftar hasil pesanan harus disediakan" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Lokasi" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Alokasikan nomor seri secara otomatis" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "Daftar hasil pesanan harus disediakan" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:878 +#: build/serializers.py:914 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:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Produksi" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Dibatalkan" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Selesai" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Stok dibutuhkan untuk order produksi" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Surel diperlukan" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Diletakkan" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,575 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Hasil produksi sudah selesai" + +#: order/models.py:1030 +msgid "Order is already cancelled" msgstr "" -#: order/models.py:1004 +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Dikirim" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Hilang" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Dikembalikan" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5413,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5423,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5438,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5460,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5522,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5568,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5580,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5629,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5670,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5737,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5751,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5773,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5789,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5806,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5972,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6695,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6711,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7155,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7253,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7320,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7342,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7391,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7414,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7437,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7508,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7555,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7627,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7707,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7773,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7868,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7895,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7949,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7973,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8001,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8017,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8114,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8177,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8270,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8683,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8708,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "Lampiran perlu diunggah untuk tes ini" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Butuh perhatian" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Rusak" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Hancur" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Ditolak" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Item stok dibuat" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Item stok diubah" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Nomor seri yang ditetapkan" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Stok terhitung" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Stok yang ditambahkan manual" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Stok yang dikurangi manual" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Lokasi berubah" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Dirakit ke" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Diambil dari" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Komponen terpasang" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Komponen terlepas" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Dipisah dari item induk" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Pisah item dari barang induk" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Stok item digabungkan" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Dikonversi ke variasi" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Output order produksi dibuat" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Order output produksi selesai" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Terpakai oleh order produksi" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Terkirim ke pelanggan" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Dikembalikan pelanggan" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9446,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9466,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9493,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9512,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9558,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Produksi" @@ -9497,7 +9624,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9655,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9752,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10003,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10047,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10085,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10272,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10293,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10359,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10381,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10416,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10515,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "Alamat IP" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Perangkat" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Aktivitas Terakhir" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10738,26 @@ msgstr "Konfirmasi" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10958,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10972,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11137,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11327,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11347,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11402,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11571,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12017,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12054,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12087,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12136,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12262,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12500,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12524,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12540,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12760,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12773,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12830,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12884,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12904,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12995,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13057,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13414,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13422,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14068,22 @@ msgstr "Simpan" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14305,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 440d5822c3..fbac634369 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "L'utente non ha i permessi per vedere questo modello" @@ -56,26 +56,26 @@ msgstr "I dettagli dell'errore possono essere trovati nel pannello di amministra msgid "Enter date" msgstr "Inserisci la data" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Note" @@ -132,7 +132,7 @@ msgstr "L'indirizzo di posta elettronica fornito non è approvato." msgid "Registration is disabled." msgstr "La registrazione è disabilitata." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turco" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamita" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Cinese (Semplificato)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "I metadati devono essere un oggetto python dict" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Metadati Plugin" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Campo di metadati JSON, da utilizzare con plugin esterni" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Schema formattato impropriamente" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Formato chiave sconosciuta" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Formato chiave mancante" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Il campo di riferimento non può essere vuoto" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Il campo deve corrispondere al modello richiesto" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Numero di riferimento troppo grande" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "File mancante" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Link esterno mancante" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Allegato" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Seleziona file da allegare" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Collegamento" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Link a URL esterno" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Commento" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Commento del file" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Utente" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "data caricamento" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Il nome del file non deve essere vuoto" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Directory allegati non valida" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Il nome del file contiene caratteri non validi '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Nome file estensione mancante" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Esiste già un allegato con questo nome di file" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Errore nella rinominazione del file" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Scelta non valida" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Descrizione" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "genitore" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Percorso" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Note di Markdown (opzionale)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Dati del Codice a Barre" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Dati Codice a Barre applicazioni di terze parti" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Codice a Barre" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Codice univoco del codice a barre" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Trovato codice a barre esistente" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Errore del server" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Deve essere un numero valido" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL del file immagine remota" msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Controllo in background non riuscito" @@ -694,202 +698,6 @@ msgstr "Server di posta non configurato" msgid "InvenTree system health checks failed" msgstr "Controlli di sistema InvenTree falliti" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "In attesa" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Inviato" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Completo" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Annullato" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Perso" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Reso" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "In corso" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Spedito" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Attenzione necessaria" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Danneggiato" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Distrutto" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Respinto" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "In quarantena" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Voce di tracciamento stock preesistente" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Elemento stock creato" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Elemento stock modificato" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Numero di serie assegnato" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Stock contato" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Stock aggiunto manualmente" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Stock rimosso manualmente" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Posizione cambiata" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Stock aggiornato" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Installato nell'assemblaggio" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Rimosso dall'assemblaggio" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Componente installato" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Elemento componente rimosso" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Diviso dall'elemento genitore" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Dividi elemento figlio" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Elemento stock raggruppato" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Convertito in variante" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Genera l'output dell'ordine creato" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Build order output completato" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Ordine di costruzione rifiutato" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Impegnato dall'ordine di costruzione" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Spedito contro l'ordine di vendita" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Ricevuto contro l'ordine di acquisto" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Restituito contro l'ordine di ritorno" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Inviato al cliente" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Restituito dal cliente" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Produzione" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Indietro" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Riparare" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Sostituire" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Rimborso" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Rifiuta" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Database sconosciuto" @@ -938,45 +746,45 @@ msgstr "Informazioni sistema" msgid "About InvenTree" msgstr "Informazioni Su InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Opzionale" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Monitorato" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Allocato" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Allocato" msgid "Available" msgstr "Disponibile" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Ordine di Produzione" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Ordine di Produzione" msgid "Build Orders" msgstr "Ordini di Produzione" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Scelta non valida per la produzione genitore" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "L'ordine di costruzione della parte non può essere cambiata" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Riferimento" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Breve descrizione della build (facoltativo)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Produzione Genitore" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Ordine di produzione a cui questa produzione viene assegnata" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Articolo" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Selezionare parte da produrre" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Quantità Produzione" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Numero di articoli da costruire" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Numero di articoli di magazzino che sono stati completati" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Stato Produzione" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "Completato da" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Codice del progetto" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Quantità" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Installa in" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Numeri di Serie Assegnazione automatica" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" - -#: build/serializers.py:337 stock/api.py:995 -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:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Deve essere fornito un elenco dei risultati di produzione" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Posizione" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Numeri di Serie Assegnazione automatica" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +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:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "Deve essere fornito un elenco dei risultati di produzione" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Stato" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:512 +#: build/serializers.py:527 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:592 -msgid "Remove Allocated Stock" -msgstr "Rimuovi Giacenze Allocate" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Detrai qualsiasi scorta che è stata già assegnata a questa produzione" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:653 +#: build/serializers.py:681 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:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "gli elementi degli articoli della distinta base devono puntare alla stessa parte dell'ordine di produzione" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:871 +#: build/serializers.py:907 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:878 +#: build/serializers.py:914 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:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:980 +#: build/serializers.py:1016 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:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Ordinato" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "In attesa" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Produzione" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Annullato" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Completo" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Giacenza richiesta per l'ordine di produzione" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Ordine di produzione in ritardo" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Lo stock non è stato completamente assegnato a questo ordine di produzione" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Data scadenza" @@ -1846,7 +1697,7 @@ msgstr "Questa produzione era in scadenza il %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Outputs Completati" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Ordini di Vendita" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Inviato da" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Priorità" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "Elimina ordine di produzione" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "Genera Codice QR Ordine di produzione" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "Collega il codice a barre all'ordine di produzione" @@ -1911,8 +1762,8 @@ msgstr "Risorse di magazzino" msgid "Stock can be taken from any available location." msgstr "Lo stock può essere prelevato da qualsiasi posizione disponibile." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Destinazione" @@ -1926,10 +1777,10 @@ msgstr "Articoli Assegnati" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "Lotto" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Creato" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Nessuna data di destinazione impostata" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Completato" @@ -2043,11 +1894,11 @@ msgstr "Allegati" msgid "Build Notes" msgstr "Genera Note" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "Descrizione del progetto" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Nessun gruppo" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Un dominio vuoto non è consentito." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Nome dominio non valido: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Nome Istanza Del Server" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Limita visualizzazione `Informazioni`" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Mostra la modalità `Informazioni` solo ai superusers" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Nome azienda" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "URL Base" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "giorni" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Limite Dimensione Download" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "Dimensione massima consentita per il download dell'immagine remota" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "User-agent utilizzato per scaricare dall'URL" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Richiesta conferma" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Richiede una conferma esplicita dell'utente per una determinata azione." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Profondità livelli" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Profondità predefinita per la visualizzazione ad albero. I livelli più in alto possono essere caricati più lentamente quando necessari." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Aggiorna intervallo di controllo" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "Quanto spesso controllare gli aggiornamenti (impostare a zero per disabilitare)" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Backup automatico" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Abilita il backup automatico di database e file multimediali" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Intervallo Di Backup Automatico" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Definisci i giorni intercorrenti tra un backup automatico e l'altro" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 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/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 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/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 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/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Codice a barre inserito scaduto" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Tempo di ritardo di elaborazione codice a barre" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Codice a Barre Supporto Webcam" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Abilita il campo revisione per l'articolo" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "Copia i dati della Distinta Base predefinita quando duplichi un articolo" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "Copia i dati dei parametri di default quando si duplica un articolo" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Copia I Dati dell'Articolo Test" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "Copia i dati di prova di default quando si duplica un articolo" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Modello" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Assemblaggio" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Componente" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Acquistabile" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Vendibile" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Tracciabile" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuale" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Mostra l'importazione nelle viste" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Mostra la procedura guidata di importazione in alcune viste articoli" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Dati iniziali dello stock" -#: common/models.py:1535 +#: common/models.py:1542 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/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Dati iniziali del fornitore" -#: common/models.py:1542 +#: common/models.py:1549 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/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Icona predefinita Categoria Articolo" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Usa Prezzi Fornitore" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Includere le discontinuità di prezzo del fornitore nei calcoli generali dei prezzi" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Ignora la Cronologia Acquisti" -#: common/models.py:1594 +#: common/models.py:1601 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/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Utilizzare i prezzi degli articoli in stock" -#: common/models.py:1602 +#: common/models.py:1609 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/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Età dei prezzi degli articoli in stock" -#: common/models.py:1610 +#: common/models.py:1617 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/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Utilizza Variazione di Prezzo" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Solo Varianti Attive" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "Utilizza solo articoli di varianti attive per calcolare i prezzi delle varianti" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "Numero di giorni prima che il prezzo dell'articolo venga aggiornato automaticamente" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "Se disponibile, i prezzi interni sostituiscono i calcoli della fascia di prezzo" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/models.py:1662 +#: common/models.py:1669 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/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Abilita Rapporto di Prova" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Abilita generazione di stampe di prova" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Allega Rapporto di Prova" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Quando si stampa un rapporto di prova, allegare una copia del rapporto di prova all'elemento di magazzino associato" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "I numeri di serie per gli articoli di magazzino devono essere univoci" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Auto Riempimento Numeri Seriali" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Auto riempimento numeri nel modulo" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "Modello per la generazione di codici batch predefiniti per gli elementi stock" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "Numero di giorni in cui gli articoli in magazzino sono considerati obsoleti prima della scadenza" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di produzione" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Vendita" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "Spedizione Predefinita Ordine Di Vendita" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "Modifica Ordini Di Vendita Completati" -#: common/models.py:1857 +#: common/models.py:1872 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/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark Shipped Orders as Complete" +msgstr "Contrassegna ordine come completato" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di acquisto" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/models.py:1879 +#: common/models.py:1902 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/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/models.py:1914 +#: common/models.py:1937 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/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Email richiesta" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "Posta due volte" -#: common/models.py:1935 +#: common/models.py:1958 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/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Password due volte" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "Al momento della registrazione chiedere agli utenti due volte l'inserimento della password" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "Gruppo a cui i nuovi utenti vengono assegnati al momento della registrazione" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/models.py:1968 +#: common/models.py:1991 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/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "Funzionalità Dell'Inventario" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Abilita la funzionalità d'inventario per la registrazione dei livelli di magazzino e il calcolo del valore di magazzino" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "Inventario periodico automatico" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Numero di giorni tra la registrazione automatica dell'inventario (imposta 0 per disabilitare)" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "I rapporti d'inventario verranno eliminati dopo il numero specificato di giorni" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Tasto impostazioni (deve essere univoco - maiuscole e minuscole" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "Nascondi Articoli Inattivi" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Mostra articoli sottoscritti" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Mostra gli articoli sottoscritti nella homepage" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Mostra le categorie sottoscritte" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Mostra le categorie dei componenti sottoscritti nella homepage" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Mostra ultimi articoli" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Mostra gli ultimi articoli sulla homepage" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Mostra le distinte base che attendono la convalida sulla homepage" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Mostra le modifiche recenti alle giacenze" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Mostra le giacenze modificate di recente nella homepage" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Mostra disponibilità scarsa delle giacenze" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Mostra disponibilità scarsa degli articoli sulla homepage" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Mostra scorte esaurite" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Mostra disponibilità scarsa delle scorte degli articoli sulla homepage" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Mostra scorte necessarie" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Mostra le scorte degli articoli necessari per la produzione sulla homepage" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Mostra scorte esaurite" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Mostra gli articoli stock scaduti nella home page" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Mostra scorte obsolete" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Mostra gli elementi obsoleti esistenti sulla home page" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Mostra produzioni in attesa" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Mostra produzioni in attesa sulla homepage" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Mostra produzioni in ritardo" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Mostra produzioni in ritardo sulla home page" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "Mostra ordini di produzione inevasi" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "Mostra ordini di produzione inevasi sulla home page" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Mostra Ordini di Produzione in ritardo" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "Mostra Ordini di Produzione in ritardo sulla home page" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "Mostra Ordini di Vendita inevasi" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "Mostra Ordini di Vendita inevasi sulla home page" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Mostra Ordini di Vendita in ritardo" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "Mostra Ordini di Vendita in ritardo sulla home page" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Mostra Notizie" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Mostra notizie sulla home page" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "Stampante per etichette predefinita" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "Configura quale stampante di etichette deve essere selezionata per impostazione predefinita" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "Visualizzazione dell'etichetta in linea" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Cerca Articoli" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "Mostra articoli della ricerca nella finestra di anteprima" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "Mostra articoli del fornitore nella finestra di anteprima" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Cerca Articoli Produttore" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "Mostra articoli del produttore nella finestra di anteprima" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Nascondi Articoli Inattivi" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "Escludi articoli inattivi dalla finestra di anteprima della ricerca" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "Cerca Categorie" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "Mostra categorie articolo nella finestra di anteprima di ricerca" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Cerca Giacenze" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Mostra articoli in giacenza nella finestra di anteprima della ricerca" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Nascondi elementi non disponibili" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Escludi gli elementi stock che non sono disponibili dalla finestra di anteprima di ricerca" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Cerca Ubicazioni" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "Mostra ubicazioni delle giacenze nella finestra di anteprima di ricerca" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Cerca Aziende" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "Mostra le aziende nella finestra di anteprima di ricerca" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Cerca Ordini Di Produzione" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Mostra gli ordini di produzione nella finestra di anteprima di ricerca" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Cerca Ordini di Acquisto" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "Mostra gli ordini di acquisto nella finestra di anteprima di ricerca" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Escludi Ordini D'Acquisto Inattivi" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "Escludi ordini di acquisto inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Cerca Ordini Di Vendita" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "Visualizzazione degli ordini di vendita nella finestra di anteprima della ricerca" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "Escludi Ordini Di Vendita Inattivi" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "Escludi ordini di vendita inattivi dalla finestra di anteprima di ricerca" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Cerca Ordini Di Reso" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "Risultati Dell'Anteprima Di Ricerca" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "Numero di risultati da visualizzare in ciascuna sezione della finestra di anteprima della ricerca" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Ricerca con regex" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Mostra quantità nei moduli" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "Visualizzare la quantità di pezzi disponibili in alcuni moduli" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "Il tasto Esc chiude i moduli" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "Utilizzare il tasto Esc per chiudere i moduli modali" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Barra di navigazione fissa" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "La posizione della barra di navigazione è fissata nella parte superiore dello schermo" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Formato Data" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Formato predefinito per visualizzare le date" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Programmazione Prodotto" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "Mostra informazioni sulla pianificazione del prodotto" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Inventario Prodotto" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Visualizza le informazioni d'inventario dell'articolo (se la funzionalità d'inventario è abilitata)" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "Lunghezza Stringa Tabella" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Prezzo" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Scadenza" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "Nome per questa notifica" msgid "Active" msgstr "Attivo" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "È questa notifica attiva" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Token per l'accesso" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Segreto" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "Host da cui questo messaggio è stato ricevuto" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Intestazione" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "Intestazione di questo messaggio" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Contenuto" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "Contenuto di questo messaggio" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "Lavorato il" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titolo" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Pubblicato" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Autore" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Riepilogo" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Letto" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "Queste notizie sull'elemento sono state lette?" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Immagine" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "File immagine" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "Elemento ricevuto" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "Errore generato dal plugin" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Indirizzo email" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Contatto" @@ -3949,7 +3827,7 @@ msgstr "Valuta predefinita utilizzata per questa azienda" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Azienda" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Articolo di base" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Seleziona articolo" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Seleziona Produttore" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "Codice articolo produttore (MPN)" @@ -4086,61 +3964,60 @@ msgstr "Codice articolo produttore" msgid "URL for external manufacturer part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "Descrizione articolo costruttore" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Codice articolo produttore" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Nome parametro" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Valore" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Valore del parametro" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Unità" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Unità parametri" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Fornitore" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Selezionare un produttore" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Nota" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "costo base" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Confezionamento" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Imballaggio del pezzo" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "Quantità Confezione" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "multiplo" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Ordine multiplo" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "Quantità disponibile dal fornitore" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "Disponibilità Aggiornata" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" @@ -4257,7 +4134,7 @@ msgstr "In magazzino" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inattivo" @@ -4293,11 +4170,11 @@ msgstr "Elimina Azienda" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "Scarica immagine dall'URL" msgid "Delete image" msgstr "Elimina immagine" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Cliente" msgid "Uses default currency" msgstr "Valuta predefinita" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Indirizzo" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Telefono" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Rimuovi" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "Cancella articolo produttore" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Articolo interno" @@ -4530,7 +4407,7 @@ msgstr "Nessuna informazione sul produttore disponibile" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Articolo Fornitore" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "Nessuna informazione sul fornitore disponibile" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "Fornitore articolo in giacenza" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Crea nuova allocazione magazzino" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nuovo Elemento in giacenza" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Aziende" msgid "New Company" msgstr "Nuova Azienda" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Inviato" -#: label/models.py:120 -msgid "Label name" -msgstr "Nome etichetta" - -#: label/models.py:128 -msgid "Label description" -msgstr "Descrizione etichetta" - -#: label/models.py:136 -msgid "Label" -msgstr "Etichetta" - -#: label/models.py:137 -msgid "Label template file" -msgstr "File modello etichetta" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Abilitato" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Modello di etichetta abilitato" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Larghezza [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Larghezza dell'etichetta, specificata in mm" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Altezza [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Larghezza dell'etichetta, specificata in mm" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Formato del nome file" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "Formato del nome file per la generazione etichetta" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Filtri" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Sconosciuto" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Prezzo Totale" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Stato dell'ordine" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "Nessun ordine di acquisto corrispondente trovato" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Ordine" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Ordine D'Acquisto" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Restituisci ordine" @@ -4976,517 +4780,577 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "Il contatto non corrisponde all'azienda selezionata" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "Descrizione dell'ordine (opzionale)" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "Seleziona il codice del progetto per questo ordine" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" -#: order/models.py:299 +#: order/models.py:311 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:313 +#: order/models.py:325 msgid "Created By" msgstr "Creato Da" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "Utente o gruppo responsabile di questo ordine" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "Punto di contatto per questo ordine" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "ricevuto da" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Data di emissione" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Data di emissione ordine" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "La quantità deve essere un numero positivo" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "spedito da" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "L'ordine non può essere completato perché nessun articolo è stato assegnato" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "La produzione è stata completata" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "L'ordine non può essere cancellato" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "Solo un ordine aperto può essere contrassegnato come completo" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 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:1013 +#: order/models.py:1043 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:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:1296 +#: order/models.py:1345 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:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "Contesto" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "eliminato" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Ricevuto" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Dove l'Acquirente desidera che questo elemento venga immagazzinato?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "Un articolo virtuale non può essere assegnato ad un ordine di vendita" -#: order/models.py:1528 +#: order/models.py:1579 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:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Prezzo di Vendita" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Spedito" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:1848 +#: order/models.py:1899 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:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "La spedizione non corrisponde all'ordine di vendita" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Linea" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Elemento" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "Seleziona l'elemento da restituire dal cliente" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "Data di ricezione" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Risultati" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "Elementi Riga" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "L'elemento di riga non corrisponde all'ordine di acquisto" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Deve essere fornita una quantità intera per gli articoli rintracciabili" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "I seguenti numeri di serie sono già assegnati" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Perso" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Reso" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "In corso" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Indietro" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Riparare" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Sostituire" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Rimborso" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Rifiuta" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Ordine D'Acquisto in ritardo" @@ -5553,7 +5417,7 @@ msgstr "Contrassegna ordine come completato" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Completa l'ordine" @@ -5563,13 +5427,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Riferimento ordine" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Descrizione Dell'Ordine" @@ -5578,19 +5442,19 @@ msgid "No suppplier information available" msgstr "Nessuna informazione sul fornitore disponibile" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "Elementi della linea completati" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Incompleto" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Emesso" @@ -5600,15 +5464,15 @@ msgstr "Costo totale" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "Il costo totale non può essere calcolato" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5526,11 @@ msgstr "Duplica selezionati" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5572,6 @@ msgstr "L'ordine è già elaborato. Non è possibile caricare i file." msgid "Step %(step)s of %(count)s" msgstr "Passo %(step)s di %(count)s" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "Elementi Riga" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Stock Ricevuto" @@ -5729,7 +5584,7 @@ msgstr "Elementi D'Ordine D'Acquisto" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Aggiungi Elemento Riga" @@ -5778,30 +5633,30 @@ msgid "Print packing list" msgstr "Stampa lista d'imballaggio" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "Riferimento Cliente" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Costo Totale" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5674,30 @@ msgid "Ship Items" msgstr "Spedisci oggetti" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Completa Ordine Di Vendita" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "Questo Ordine di Vendita non è stato assegnato completamente" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5741,12 @@ msgstr "Aggiornato {part} prezzo unitario a {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "Aggiornato {part} unità prezzo a {price} e quantità a {qty}" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "Codice Articolo" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Nome Articolo" @@ -5895,20 +5755,20 @@ msgstr "Nome Articolo" msgid "Part Description" msgstr "Descrizione Articolo" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Revisione" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Parole Chiave" @@ -5917,15 +5777,15 @@ msgstr "Parole Chiave" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "Id Categoria" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "Nome Categoria" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "Posizione Predefinita ID" @@ -5933,11 +5793,11 @@ msgstr "Posizione Predefinita ID" msgid "Default Supplier ID" msgstr "ID Fornitore Predefinito" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variante Di" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Scorta Minima" @@ -5950,160 +5810,164 @@ msgstr "Utilizzato In" msgid "Building" msgstr "In Costruzione" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "ID principale" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "Nome Principale" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "Percorso Categoria" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Articoli" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "Livello Distinta Base" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "ID Elemento Distinta Base" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "IPN Principale" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "IPN Articolo" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "Ordine D'Acquisto In Arrivo" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "Ordine di Vendita in Uscita" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "Giacenza prodotta dall'Ordine di Costruzione" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "Giacenza richiesta per l'Ordine di Produzione" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "Valido" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "Questa opzione deve essere selezionata" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Categoria" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Posizione Predefinita" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Giacenze Totali" @@ -6112,698 +5976,712 @@ msgstr "Giacenze Totali" msgid "Input quantity for price calculation" msgstr "Digita la quantità per il calcolo del prezzo" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Categoria Articoli" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Posizione predefinita per gli articoli di questa categoria" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strutturale" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Le parti non possono essere assegnate direttamente a una categoria strutturale, ma possono essere assegnate a categorie subordinate." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Keywords predefinite" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "Parole chiave predefinite per gli articoli in questa categoria" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Icona" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Icona (facoltativa)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Non puoi rendere principale questa categoria di articoli perché alcuni articoli sono già assegnati!" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "Scelta non valida per l'articolo principale" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "È Template" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Fornitore predefinito" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "Articolo fornitore predefinito" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:992 +#: part/models.py:1035 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:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:1051 +#: part/models.py:1094 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:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "Ultimo Inventario" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Data" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "Note aggiuntive" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "Utente che ha eseguito questo inventario" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "File Report Inventario (generato internamente)" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Conteggio Articolo" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "Numero di articoli oggetto d'inventario" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "Utente che ha richiesto questo report inventario" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "Il modello di prova può essere creato solo per gli articoli rintracciabili" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Abilitato" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Richiesto" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3506 +#: part/models.py:3549 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:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3513 +#: part/models.py:3556 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:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "Nome Parametro" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "Descrizione del parametro" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "Articolo principale" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Modello Parametro" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "Dati" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Valore del Parametro" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Valore Predefinito" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "ID articolo o nome articolo" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "Valore ID articolo univoco" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "Valore IPN articolo" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "Livello" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "Livello distinta base" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4048 +#: part/models.py:4091 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:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Eccedenza" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Quantità stimata scarti di produzione (assoluta o percentuale)" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 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:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: part/models.py:4096 +#: part/models.py:4139 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:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4354 +#: part/models.py:4397 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:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4419 +#: part/models.py:4462 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:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" @@ -6821,7 +6699,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" @@ -6837,299 +6715,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Copia parametri" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:480 +#: part/serializers.py:490 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:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Limitare il report d'inventario ad un articolo particolare e a eventuali articoli varianti" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Limita il report d'inventario ad una particolare categoria articolo, e a eventuali categorie secondarie" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Limita il report d'inventario ad una particolare ubicazione di magazzino, e a eventuali ubicazioni secondarie" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Genera Report" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "Genera file di report contenente dati di inventario calcolati" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "Aggiorna Articoli" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "Aggiorna gli articoli specificati con i dati calcolati di inventario" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "La funzione Inventario non è abilitata" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "Cancella Distinta Base esistente" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "Rimuovi elementi distinta base esistenti prima del caricamento" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "Nessuna colonna articolo specificata" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "Trovati più articoli corrispondenti" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "Nessun articolo corrispondente trovato" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "L'articolo non è indicato come componente" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "Quantità non fornita" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Quantità non valida" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "Almeno un elemento della distinta base è richiesto" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "Quantità Totale" @@ -7281,7 +7159,7 @@ msgstr "Aggiungi informazioni inventario" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "Inventario" @@ -7379,15 +7257,15 @@ msgstr "Fornitori articoli" msgid "Part Manufacturers" msgstr "Componenti Produttori" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7324,7 @@ msgstr "Sottoscrivi le notifiche per questo articolo" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Stampa Etichetta" @@ -7468,7 +7346,7 @@ msgstr "Conta articoli magazzino" msgid "Transfer part stock" msgstr "Trasferisci giacenza" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "Azioni articolo" @@ -7517,7 +7395,7 @@ msgid "Part is virtual (not a physical part)" msgstr "L'Articolo è virtuale (non è un articolo fisico)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "Mostra i Dettagli Articolo" @@ -7540,7 +7418,7 @@ msgid "Minimum stock level" msgstr "Livello minimo di giacenza" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7441,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7512,8 @@ msgstr "Varianti" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Magazzino" @@ -7681,7 +7559,7 @@ msgstr "Modifica" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Ultimo aggiornamento" @@ -7753,7 +7631,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7711,7 @@ msgstr "Immagine articolo non trovata" msgid "Part Pricing" msgstr "Prezzo Articolo" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7777,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Scorte insufficienti disponibili" @@ -7994,20 +7872,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "Stampa etichetta fallita" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7899,7 @@ msgstr "Fornisce supporto nativo per codici a barre" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7953,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7977,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8005,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8021,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8118,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "Configurazione Plugin" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "Configurazioni Plugin" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "Key dei plugin" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "PluginName del plugin" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "Nome Pacchetto" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "Il plugin è attivo" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Installato" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "Plugin di esempio" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Plugin Integrato" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "Metodo" @@ -8302,17 +8181,17 @@ msgstr "Metodo" msgid "No author found" msgstr "Nessun autore trovato" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8274,363 @@ msgstr "Installazione non confermata" msgid "Either packagename of URL must be provided" msgstr "Deve essere fornito uno dei nomi del pacchetto URL" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Nessun oggetto valido fornito nel modello" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Il file del modello '{template}' è mancante o non esiste" -#: report/api.py:319 -msgid "Test report" -msgstr "Report test" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Nome modello" -#: report/models.py:183 -msgid "Report template file" -msgstr "File modello di report" +#: report/models.py:156 +msgid "Template description" +msgstr "" -#: report/models.py:190 -msgid "Report template description" -msgstr "Descrizione del modello report" +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "Numero di revisione del rapporto (auto-incrementi)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Formato del nome file" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Filtri" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" -msgstr "Sequenza per generare i nomi dei file report" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Larghezza [mm]" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "Modello report abilitato" +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "Filtri di ricerca elementi di stock (elenco separato da virgole key=coppia di valori)" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Altezza [mm]" -#: report/models.py:354 -msgid "Include Installed Tests" -msgstr "Includi Test Installati" +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" -msgstr "Includi i risultati dei test per gli elementi stock installati all'interno dell'elemento assemblato" - -#: report/models.py:424 -msgid "Build Filters" -msgstr "Filtri di produzione" - -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "Filtri di ricerca produzione (elenco separato da virgole key=coppia di valori" - -#: report/models.py:464 -msgid "Part Filters" -msgstr "Filtri Articolo" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "Filtri di ricerca articolo (elenco separato da virgole key=coppia di valori" - -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "Ordine di Acquisto filtra la ricerca" - -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "Ordine di Vendita filtra la ricerca" - -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:648 +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "" + +#: report/models.py:448 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:456 +msgid "Report Template" +msgstr "" + +#: report/models.py:463 report/models.py:486 +msgid "Output File" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" +msgstr "" + +#: report/models.py:475 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "Report file snippet" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "Descrizione file snippet" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "Risorsa" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "Report file risorsa" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "File risorsa descrizione" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Materiali necessari" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "Richiesto Per" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "Il fornitore è stato eliminato" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Prezzo Unitario" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "Totale" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Numero Seriale" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "Test Report Elemento Stock" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "Risultati Test" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Risultato" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "Passaggio" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "Fallito" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "Nessun risultato (richiesto)" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "Nessun risultato" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Elementi installati" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Seriale" @@ -8724,7 +8687,7 @@ msgstr "Nome Fornitore" msgid "Customer ID" msgstr "ID Cliente" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Installato In" @@ -8749,555 +8712,723 @@ msgstr "Revisione Necessaria" msgid "Delete on Deplete" msgstr "Elimina al esaurimento" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "Data di Scadenza" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Ubicazione Esterna" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Obsoleto" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "Deve essere fornita un articolo valido" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 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/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Posizioni magazzino" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Proprietario" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Seleziona Owner" -#: stock/models.py:167 +#: stock/models.py:175 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:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Esterno" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "Si tratta di una posizione esterna al magazzino" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 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:626 +#: stock/models.py:643 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:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 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:683 +#: stock/models.py:700 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:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "L'elemento non può appartenere a se stesso" -#: stock/models.py:712 +#: stock/models.py:729 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:725 +#: stock/models.py:742 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:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Elemento di magazzino principale" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di magazzino" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "Questo elemento è stato installato su un altro elemento?" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "Genera Costruzione" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "Costruisci per questo elemento di magazzino" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "Origina Ordine di Acquisto" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Ordine d'acquisto per questo articolo in magazzino" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "Destinazione Ordine di Vendita" -#: stock/models.py:885 +#: stock/models.py:902 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:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "Cancella questo Elemento di Magazzino quando la giacenza è esaurita" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "Prezzo di acquisto unitario al momento dell’acquisto" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "Convertito in articolo" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "I numeri di serie devono essere numeri interi" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 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:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "L'elemento di magazzino è installato in un altro elemento" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "L'elemento di magazzino contiene altri elementi" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "L'elemento di magazzino è stato assegnato a un cliente" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "L'elemento di magazzino è attualmente in produzione" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "I codici di stato dello stock devono corrispondere" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "Le giacenze non possono essere spostate perché non disponibili" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "Note d'ingresso" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "Il valore deve essere fornito per questo test" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "L'allegato deve essere caricato per questo test" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "Risultato Test" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "Test valore output" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "Risultato della prova allegato" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "Note del test" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "Il numero di serie è troppo grande" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "Inserisci il numero di elementi di magazzino da serializzare" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, 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:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "Note opzionali elemento" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "Numeri di serie non possono essere assegnati a questo articolo" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "Posizione di destinazione per l'elemento restituito" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 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:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "Consenti stato non corrispondente" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 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:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "Note sugli spostamenti di magazzino" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Attenzione necessaria" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Danneggiato" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Distrutto" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Respinto" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "In quarantena" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Voce di tracciamento stock preesistente" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Elemento stock creato" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Elemento stock modificato" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Numero di serie assegnato" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Stock contato" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Stock aggiunto manualmente" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Stock rimosso manualmente" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Posizione cambiata" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Stock aggiornato" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Installato nell'assemblaggio" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Rimosso dall'assemblaggio" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Componente installato" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Elemento componente rimosso" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Diviso dall'elemento genitore" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Dividi elemento figlio" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Elemento stock raggruppato" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Convertito in variante" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Genera l'output dell'ordine creato" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Build order output completato" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Ordine di costruzione rifiutato" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Impegnato dall'ordine di costruzione" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Spedito contro l'ordine di vendita" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Ricevuto contro l'ordine di acquisto" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Restituito contro l'ordine di ritorno" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Inviato al cliente" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Restituito dal cliente" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "Informazioni di Tracciamento Magazzino" @@ -9319,7 +9450,7 @@ msgstr "Dati di Test" msgid "Test Report" msgstr "Rapporto del Test" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "Elimina Dati di Test" @@ -9339,11 +9470,11 @@ msgstr "Elementi di magazzino installati" msgid "Install Stock Item" msgstr "Installa Elemento Magazzino" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "Elimina tutti i risultati del test per questo elemento di magazzino" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9497,17 @@ msgid "Stock adjustment actions" msgstr "Azioni adeguamento giacenza" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Conta giacenza" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "Aggiungi giacenza" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "Rimuovi giacenza" @@ -9385,12 +9516,12 @@ msgid "Serialize stock" msgstr "Serializza magazzino" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Trasferisci giacenza" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "Assegna al cliente" @@ -9431,7 +9562,7 @@ msgid "Delete stock item" msgstr "Cancella elemento di magazzino" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Produzione" @@ -9497,7 +9628,7 @@ msgid "Available Quantity" msgstr "Quantità Disponibile" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Nessuna posizione impostata" @@ -9528,40 +9659,40 @@ msgstr "Questo Elemento Stock scade il %(item.expiry_date)s" msgid "No stocktake performed" msgstr "Nessun inventario eseguito" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "Selezionare una delle varianti dell'articolo elencate sotto." -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Attenzione" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "Questa azione non può essere facilmente annullata" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9756,32 @@ msgstr "Proprietario Posizione" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Non sei nell'elenco dei proprietari di questa posizione. Questa posizione di giacenza non può essere modificata." -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Crea nuova posizione di magazzino" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Nuova Posizione" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10007,12 @@ msgstr "Impostazioni di accesso" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "L'email in uscita non è stata configurata. Alcune funzioni di login e di registrazione potrebbero non funzionare correttamente!" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Registrati" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "Accesso singolo" @@ -9916,11 +10051,11 @@ msgstr "" msgid "Part Settings" msgstr "Impostazioni articolo" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "Importa Articolo" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "Importa Articolo" @@ -9954,36 +10089,36 @@ msgstr "Impostazioni Plugin" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "Cambiando le impostazioni qui sotto, si richiede di riavviare immediatamente il server. Non cambiare le impostazioni durante l'utilizzo." -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Plugin" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Installa Plugin" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "I plugin esterni non sono abilitati per questa installazione InvenTree" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "Plugin Errore Stack" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Messaggio" @@ -10141,7 +10276,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Elimina" @@ -10162,7 +10297,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10363,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10385,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10420,7 @@ msgstr "Impostazioni Ordine di Vendita" msgid "Stock Settings" msgstr "Impostazioni Magazzino" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10519,49 @@ msgstr "Imposta multifattore" msgid "Remove multifactor" msgstr "Rimuovi multifattore" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Sessioni Attive" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "Disconnetti le sessioni attive (tranne questa)" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "Disconnetti Sessioni Attive" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "sconosciuto su sconosciuto" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "sconosciuto" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "Indirizzo IP" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Dispositivo" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Ultima attività" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s fa (questa sessione)" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s fa" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10742,26 @@ msgstr "Conferma" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Questo link di conferma email è scaduto o non è valido. Per favoreinoltra una nuova richiesta di conferma email." -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Accedi" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "Non sei ancora iscritto?" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Registrati" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Password dimenticata?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "o accedi con" @@ -10827,7 +10962,7 @@ msgid "The following parts are low on required stock" msgstr "I seguenti articoli sono pochi nel magazzino richiesto" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Quantità richiesta" @@ -10841,7 +10976,7 @@ msgid "Click on the following link to view this part" msgstr "Clicca il seguente link per visualizzare questo articolo" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "Quantità minima" @@ -11006,7 +11141,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11331,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11351,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11406,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11575,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12021,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12058,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12091,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Esistono errori nel modulo" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12140,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12266,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12504,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12528,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12544,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12764,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12777,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12834,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12888,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12908,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12999,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13061,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13418,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Aggiungi" @@ -13327,180 +13426,180 @@ msgstr "Aggiungi" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14072,22 @@ msgstr "Salva" msgid "Show all notifications and history" msgstr "Mostra tutte le notifiche e la cronologia" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Dati QR non forniti" @@ -14194,35 +14309,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Impostazione autorizzazioni" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Gruppo" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Visualizza" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Autorizzazione a visualizzare gli articoli" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Autorizzazione ad aggiungere elementi" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Modificare" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Permessi per modificare gli elementi" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Autorizzazione ad eliminare gli elementi" - diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 2d767bf122..af521726de 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "ユーザーにこのモデルを表示する権限がありません" @@ -56,26 +56,26 @@ msgstr "エラーの詳細は管理者パネルで確認できます" msgid "Enter date" msgstr "日付を入力する" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "メモ" @@ -132,7 +132,7 @@ msgstr "指定されたメールドメインは承認されていません。" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "数量コードが無効です" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "トルコ語" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "ベトナム語" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "メールアドレス" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "プラグインメタデータ" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "外部プラグインで使用するためのJSONメタデータフィールド" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "ファイルがありません" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "添付ファイル" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "添付ファイルを選択" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "リンク" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "外部 サイト へのリンク" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "コメント:" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "ファイルコメント" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "ユーザー" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "アップロード日時" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "ファイル名は空欄にできません" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "添付ファイルのディレクトリが正しくありません" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "ファイル名に無効な文字'{c}'が含まれています" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "ファイル名に拡張子がありません" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "この名前の貼付ファイルは既に存在します" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "ファイル名の変更に失敗しました" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "無効な選択です" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "説明" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "親" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "マークダウンメモ (オプション)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "バーコード情報" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "サードパーティ製バーコードデータ" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "外部画像ファイルのURL" msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "バックグラウンドワーカーのチェックに失敗しました" @@ -694,202 +698,6 @@ msgstr "メールアドレスが未設定です" msgid "InvenTree system health checks failed" msgstr "InvenTree システムのヘルスチェックに失敗しました" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "処理待ち" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "設置済" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "完了" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "キャンセル済" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "紛失" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "返品済" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "処理中" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "発送済み" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "注意が必要です" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "破損" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "破壊されました" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "却下済み" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "在庫商品を作成しました" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "在庫商品編集済み" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "割り当てられたシリアル番号" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "在庫数" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "手動在庫追加が完了しました" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "手動在庫削除が完了しました" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "ロケーションが変更されました" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "アセンブリへインストールしました" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "アセンブリから削除しました" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "インストール済みのコンポーネント項目" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "コンポーネント項目を削除しました" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "親アイテムから分割する" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "子項目を分割" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "商品在庫をマージしました" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "組立注文の出力が作成されました" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "組立注文の出力が完了しました" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "顧客に送信されました" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "顧客からの返品" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "生産" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "システム情報" msgid "About InvenTree" msgstr "InvenTree について" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "オプション" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "組立注文" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "組立注文" msgid "Build Orders" msgstr "組立注文" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "パーツ" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "組立状況" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "作成日時" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "外部リンク" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "組立優先度" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "数量" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "ステータス" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "処理待ち" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "生産" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "キャンセル済" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "完了" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "外部URLからの画像ダウンロードを許可する" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "外部URL画像の最大サイズ" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "テンプレート" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "アセンブリ" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "コンポーネント" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "購入可能" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "販売可能" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "追跡可能" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "デバッグモード" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "シリアル番号を自動入力" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "メールアドレスは必須です" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "非アクティブな部品を非表示" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "購読中の部品を表示" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "購読中のカテゴリを表示" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "連絡先メールアドレス" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "メーカー・パーツ" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "仕入先" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "顧客" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "メーカー・パーツを削除" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "内部パーツ" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "設置済" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "外部ページへのリンク" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "発送済み" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "紛失" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "返品済" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "処理中" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "キーワード" @@ -5917,15 +5771,15 @@ msgstr "キーワード" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "カテゴリID" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "カテゴリ名" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "パーツ" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "カテゴリ" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "パーツカテゴリ" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "パーツカテゴリ" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "カテゴリを選択" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "このパーツの通知を受け取る" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "在庫" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "シリアル番号" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "シリアル番号が既に存在します" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "シリアル番号が大きすぎます" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "注意が必要です" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "破損" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "破壊されました" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "却下済み" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "在庫商品を作成しました" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "在庫商品編集済み" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "割り当てられたシリアル番号" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "在庫数" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "手動在庫追加が完了しました" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "手動在庫削除が完了しました" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "ロケーションが変更されました" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "アセンブリへインストールしました" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "アセンブリから削除しました" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "インストール済みのコンポーネント項目" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "コンポーネント項目を削除しました" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "親アイテムから分割する" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "子項目を分割" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "商品在庫をマージしました" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "組立注文の出力が作成されました" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "組立注文の出力が完了しました" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "顧客に送信されました" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "顧客からの返品" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "組立" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "確認" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "このパーツを表示するには、次のリンクをクリックしてください" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "最小在庫" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "パーミッション設定" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "グループ" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "表示" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "項目を表示する権限" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "項目を追加する権限" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "変更" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "項目を編集する権限" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "項目を削除する権限" - diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index e07c9f2839..3a76c98fd0 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -132,7 +132,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index c123232a01..8fbe805bf1 100644 --- a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po @@ -2,26 +2,26 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:20\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==0 ? 0 : n%10==1 && n%100!=11 ? 1 : 2);\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" "X-Crowdin-Language: lv\n" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API galapunkts nav atrasts" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "Ievadiet datumu" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Piezīmes" @@ -132,7 +132,7 @@ msgstr "Norādītais e-pasta domēns nav apstiprināts." msgid "Registration is disabled." msgstr "Reģistrācija ir izslēgta." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 3cc600c792..5524c4bd1b 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Gebruiker heeft geen rechten om dit model te bekijken" @@ -56,26 +56,26 @@ msgstr "Error details kunnen worden gevonden in het admin scherm" msgid "Enter date" msgstr "Voer datum in" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Opmerkingen" @@ -132,7 +132,7 @@ msgstr "Het ingevoerde e-maildomein is niet goedgekeurd." msgid "Registration is disabled." msgstr "Registratie is uitgeschakeld." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turks" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamees" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Chinees (vereenvoudigd)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Chinees (traditioneel)" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metadata moeten een python dict object zijn" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "JSON metadata veld, voor gebruik door externe plugins" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Onjuist opgemaakt patroon" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Onbekende opmaaksleutel gespecificeerd" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Vereiste opmaaksleutel ontbreekt" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Referentieveld mag niet leeg zijn" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referentie moet overeenkomen met verplicht patroon" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referentienummer is te groot" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Ontbrekend bestand" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Externe link ontbreekt" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Bijlage" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Link naar externe URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Opmerking" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Bestand opmerking" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Gebruiker" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "uploaddatum" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Bestandsnaam mag niet leeg zijn" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Foute bijlagemap" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Bestandsnaam bevat illegale teken '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Bestandsnaam mist extensie" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Bijlage met deze bestandsnaam bestaat al" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Fout bij hernoemen bestand" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Ongeldige keuze" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Omschrijving" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "bovenliggende" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Pad" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Markdown notitie (optioneel)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Streepjescode gegevens" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Streepjescode van derden" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Hash van Streepjescode" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Unieke hash van barcode gegevens" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Bestaande barcode gevonden" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Serverfout" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL van extern afbeeldingsbestand" msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Achtergrondwerker check is gefaald" @@ -694,202 +698,6 @@ msgstr "E-mailbackend niet geconfigureerd" msgid "InvenTree system health checks failed" msgstr "InvenTree gezondsheidschecks mislukt" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Bezig" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Geplaatst" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Voltooid" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Geannuleerd" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Kwijt" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Retour" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "In Behandeling" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Verzonden" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Aandacht nodig" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Beschadigd" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Verwoest" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Afgewezen" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "In quarantaine geplaatst" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Verouderde volgcode" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Voorraaditem gemaakt" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Bewerken voorraadartikel" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Serienummer toegewezen" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Voorraad geteld" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Voorraad handmatig toegevoegd" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Voorraad handmatig verwijderd" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Locatie veranderd" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Voorraad bijgewerkt" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Gemonteerd" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Gedemonteerd" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Geïnstalleerd componentartikel" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Verwijderd componentartikel" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Splits van bovenliggend item" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Splits onderliggende item" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Samengevoegde voorraadartikelen" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Geconverteerd naar variant" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Product aangemaakt" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Product voltooid" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Build order uitvoer afgewezen" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Verbruikt door productieorder" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Verzonden onder verkooporder" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Ontvangen onder verkooporder" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Geretourneerd onder retourorder" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Naar klant verzonden" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Geretourneerd door klant" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Productie" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Retour" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Herstel" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Vervangen" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Restitutie" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Afwijzen" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "Systeeminformatie" msgid "About InvenTree" msgstr "Over InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Optioneel" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Toegewezen" msgid "Available" msgstr "Beschikbaar" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Productieorder" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Productieorder" msgid "Build Orders" msgstr "Productieorders" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Ongeldige keuze voor bovenliggende productie" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referentie" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Korte beschrijving van de build (optioneel)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Productieorder waar deze productie aan is toegewezen" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Onderdeel" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Selecteer onderdeel om te produceren" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Verkooporder Referentie" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Verkooporder waar deze productie aan is toegewezen" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Bronlocatie" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Productiehoeveelheid" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te produceren" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Productiestatus" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "voltooid door" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Uitgegeven door" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Externe Link" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Bouw prioriteit" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Bouw object" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Installeren in" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Serienummers automatisch toewijzen" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "De volgende serienummers bestaan al of zijn ongeldig" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Een lijst van productieuitvoeren moet worden verstrekt" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Locatie" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Serienummers automatisch toewijzen" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "De volgende serienummers bestaan al of zijn ongeldig" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "Een lijst van productieuitvoeren moet worden verstrekt" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" -msgstr "Toegewezen Voorraad Verwijderen" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Verminder alle voorraad die al is toegewezen aan deze productie" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:653 +#: build/serializers.py:681 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:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part moet naar hetzelfde onderdeel wijzen als de productieorder" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:871 +#: build/serializers.py:907 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:878 +#: build/serializers.py:914 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:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "In bestelling" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Bezig" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Productie" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Geannuleerd" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Voltooid" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Voorraad vereist voor productieorder" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Achterstallige Productieorder" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Voorraad is niet volledig toegewezen aan deze productieorder" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Streefdatum" @@ -1846,7 +1697,7 @@ msgstr "Deze productie was verwacht op %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Voltooide Uitvoeren" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Verkooporder" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Uitgegeven door" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Prioriteit" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "Voorraadbron" msgid "Stock can be taken from any available location." msgstr "Voorraad kan worden genomen van elke beschikbare locatie." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Bestemming" @@ -1926,10 +1777,10 @@ msgstr "Toegewezen Onderdelen" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Gecreëerd" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Geen doeldatum ingesteld" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Voltooid" @@ -2043,11 +1894,11 @@ msgstr "Bijlagen" msgid "Build Notes" msgstr "Productie notities" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "Projectbeschrijving" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Instellingswaarde" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Geen groep" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Een leeg domein is niet toegestaan." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ongeldige domeinnaam: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Geen plug-in gevonden" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Opnieuw opstarten vereist" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "Een instelling is gewijzigd waarvoor een herstart van de server vereist is" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Migraties in behandeling" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "ID Serverinstantie" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "Stringbeschrijving voor de server instantie" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Tonen `over` beperken" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Toon de `over` modal alleen aan superusers" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Basis-URL" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Standaard Valuta" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "Selecteer basisvaluta voor de berekening van prijzen" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "dagen" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Download van URL" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Download limiet" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "Maximale downloadgrootte voor externe afbeelding" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "User-agent gebruikt om te downloaden van URL" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Bevestiging vereist" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Vereis expliciete bevestiging van de gebruiker voor bepaalde actie." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Boomstructuur Diepte" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standaard diepte voor treeview. Diepere niveaus kunnen geladen worden wanneer ze nodig zijn." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Interval voor update" -#: common/models.py:1369 +#: common/models.py:1370 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/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Automatische backup" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Automatische back-up van database- en mediabestanden inschakelen" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Automatische backup interval" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Geef het aantal dagen op tussen geautomatiseerde backup" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Interval Taak Verwijderen" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "Error Log Verwijderings Interval" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "Interval Verwijderen Notificatie" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "Meldingen van gebruikers worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Barcode Invoer Vertraging" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Barcode invoerverwerking vertraging" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "Herzieningen onderdeel" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Revisieveld voor onderdeel inschakelen" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Sjabloon" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Samenstelling" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Koopbaar" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Verkoopbaar" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Volgbaar" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtueel" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Toon Import in Weergaven" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Toon de importwizard in sommige onderdelenweergaven" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Initiële voorraadgegevens" -#: common/models.py:1535 +#: common/models.py:1542 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/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Initiële leveranciergegevens" -#: common/models.py:1542 +#: common/models.py:1549 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/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Standaardicoon voor onderdeel catagorie" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "Standaardicoon voor onderdeel catagorie (leeg betekent geen pictogram)" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "Forceer Parameter Eenheden" -#: common/models.py:1562 +#: common/models.py:1569 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/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Minimaal aantal prijs decimalen" -#: common/models.py:1570 +#: common/models.py:1577 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/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "Maximum prijs decimalen" -#: common/models.py:1578 +#: common/models.py:1585 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/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Gebruik leveranciersprijzen" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Prijsvoordelen leveranciers opnemen in de totale prijsberekening" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Aankoopgeschiedenis overschrijven" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische order prijzen overschrijven de prijzen van de leverancier" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Gebruik voorraaditem prijzen" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Gebruik prijzen van handmatig ingevoerde voorraadgegevens voor prijsberekeningen" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Voorraad artikelprijs leeftijd" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Voorraaditems ouder dan dit aantal dagen uitsluiten van prijsberekeningen" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Gebruik variantprijzen" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenprijzen opnemen in de totale prijsberekening" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Alleen actieve varianten" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "Gebruik alleen actieve variantonderdelen voor het berekenen van variantprijzen" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "Prijzen Herbouw interval" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "Aantal dagen voordat de prijzen voor onderdelen automatisch worden bijgewerkt" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Interne prijs overschrijven" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijsbereik" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI resolutie bij het genereren van afbeelginsbestanden voor label printer plugins" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Paginagrootte" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Activeer Testrapporten" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Activeer het genereren van testrapporten" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Testrapporten Toevoegen" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Bij het afdrukken van een Testrapport, voeg een kopie van het Testrapport toe aan het bijbehorende Voorraadartikel" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "Globaal unieke serienummers" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummers voor voorraaditems moeten globaal uniek zijn" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Serienummers automatisch invullen" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Automatisch invullen van serienummer in formulieren" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Verwijder uitgeputte voorraad" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "Aantal dagen voordat voorraadartikelen als verouderd worden beschouwd voor ze verlopen" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "Voorraadlocatie standaard icoon" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "Standaard locatie pictogram (leeg betekent geen icoon)" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "Geïnstalleerde voorraad items weergeven" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "Retourorders inschakelen" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "Retourorder functionaliteit inschakelen in de gebruikersinterface" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "Retourorder referentie patroon" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "Bewerk voltooide retourorders" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "Bewerken van retourorders toestaan nadat deze zijn voltooid" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "Bewerk voltooide verkooporders" -#: common/models.py:1857 +#: common/models.py:1872 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/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark Shipped Orders as Complete" +msgstr "Order markeren als voltooid" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Bewerk voltooide verkooporders" -#: common/models.py:1879 +#: common/models.py:1902 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/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "Schakel gebruikersregistratie met SSO in" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Zelfregistratie voor gebruikers middels SSO op de inlogpagina's inschakelen" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "SSO-gebruikers automatisch invullen" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "Gebruikersdetails van SSO-accountgegevens automatisch invullen" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "Bij inschrijving gebruikers twee keer om hun e-mail vragen" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Wachtwoord tweemaal" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Toegestane domeinen" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Inschrijven beperken tot bepaalde domeinen (komma-gescheiden, beginnend met @)" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "Groep waaraan nieuwe gebruikers worden toegewezen bij registratie" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/models.py:1968 +#: common/models.py:1991 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/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "Plugins toestaan om URL-routes toe te voegen" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "Activeer navigatie integratie" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "Plugins toestaan om te integreren in navigatie" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "Activeer app integratie" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "Activeer plug-ins om apps toe te voegen" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "Activeer planning integratie" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "Activeer plugin om periodiek taken uit te voeren" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "Activeer evenement integratie" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "Activeer plugin om op interne evenementen te reageren" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "Activeer project codes" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "Activeer project codes voor het bijhouden van projecten" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "Voorraadcontrole functionaliteit" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Schakel voorraadfunctionaliteit in voor het opnemen van voorraadniveaus en het berekenen van voorraadwaarde" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "Externe locaties uitsluiten" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Voorraadartikelen op externe locaties uitsluiten van voorraadberekeningen" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "Automatische Voorraadcontrole Periode" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Aantal dagen tussen automatische voorraadopname (ingesteld op nul om uit te schakelen)" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "Rapport Verwijdering Interval" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Voorraadrapportage zal worden verwijderd na het opgegeven aantal dagen" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Instellingssleutel (moet uniek zijn - hoofdletter ongevoelig" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Verberg inactieve delen bij items op de homepage" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Toon geabonneerde onderdelen" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Toon geabonneerde onderdelen op de homepage" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Toon geabonneerde categorieën" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Toon geabonneerde onderdeel categorieën op de startpagina" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Toon laatste onderdelen" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Toon laatste onderdelen op de startpagina" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Laat BOMs zien die wachten op validatie op de startpagina" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Toon recente voorraadwijzigingen" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Toon recent aangepaste voorraadartikelen op de startpagina" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Toon lage voorraad" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Toon lage voorraad van artikelen op de startpagina" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Toon lege voorraad" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Toon lege voorraad van artikelen op de startpagina" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Toon benodigde voorraad" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Toon benodigde voorraad van artikelen voor productie op de startpagina" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Toon verlopen voorraad" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Toon verlopen voorraad van artikelen op de startpagina" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Toon verouderde voorraad" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Toon verouderde voorraad van artikelen op de startpagina" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Toon openstaande producties" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Toon openstaande producties op de startpagina" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Toon achterstallige productie" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Toon achterstallige producties op de startpagina" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "Toon uitstaande PO's" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "Toon uitstaande PO's op de startpagina" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Toon achterstallige PO's" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "Toon achterstallige PO's op de startpagina" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "Toon uitstaande SO's" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "Toon uitstaande SO's op de startpagina" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Toon achterstallige SO's" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "Toon achterstallige SO's op de startpagina" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "Toon in behandeling SO verzendingen" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "Toon in behandeling zijnde SO verzendingen op de startpagina" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Nieuws tonen" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Nieuws op de startpagina weergeven" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "Inline labelweergave" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "PDF-labels in browser weergeven, in plaats van als bestand te downloaden" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "Standaard label printer" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "Instellen welke label printer standaard moet worden geselecteerd" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "Inline rapport weergeven" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "PDF-rapporten in de browser weergeven, in plaats van als bestand te downloaden" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Zoek Onderdelen" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "Onderdelen weergeven in zoekscherm" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "Zoek leveranciersonderdelen" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "Leveranciersonderdelen weergeven in zoekscherm" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Fabrikant onderdelen zoeken" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "Fabrikant onderdelen weergeven in zoekscherm" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Inactieve Onderdelen Verbergen" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "Zoek categorieën" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "Toon onderdeelcategorieën in zoekvenster" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Zoek in Voorraad" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Toon voorraad items in zoekvenster" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Verberg niet beschikbare voorraad items" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Voorraadartikelen die niet beschikbaar zijn niet in het zoekvenster weergeven" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Locaties doorzoeken" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "Toon voorraadlocaties in zoekvenster" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Zoek bedrijven" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "Toon bedrijven in zoekvenster" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Zoek Bouworders" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Toon bouworders in zoekvenster" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Inkooporders Zoeken" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "Toon inkooporders in het zoekvenster" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Inactieve Inkooporders Weglaten" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "Inactieve inkooporders weglaten in het zoekvenster" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Verkooporders zoeken" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "Toon verkooporders in het zoekvenster" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "Inactieve Verkooporders Weglaten" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "Inactieve verkooporders weglaten in het zoekvenster" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Zoek retourorders" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "Toon bouworders in zoekvenster" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "Inactieve retourbestellingen weglaten" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "Inactieve retourorders uitsluiten in zoekvenster" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "Zoekvoorbeeld resultaten" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "Aantal resultaten om weer te geven in elk gedeelte van het zoekvenster" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Regex zoeken" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "Schakel reguliere expressies in zoekopdrachten in" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "Hele woorden zoeken" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "Zoekopdrachten geven resultaat voor hele woord overeenkomsten" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Toon hoeveelheid in formulieren" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "Hoeveelheid beschikbare onderdelen in sommige formulieren weergeven" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "Escape-toets sluit formulieren" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "Gebruik de Escape-toets om standaard formulieren te sluiten" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Vaste navigatiebalk" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "De navigatiebalk positie is gefixeerd aan de bovenkant van het scherm" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Datum formaat" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Voorkeursindeling voor weergave van datums" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Onderdeel planning" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "Toon informatie voor het plannen van onderdelen" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Voorraadcontrole onderdeel" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Toon voorraadinformatie van onderdeel (als voorraadcontrole functionaliteit is ingeschakeld)" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "Tabel tekenreekslengte" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "Standaard sjabloon product onderdeel" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "Het onderdeellabelsjabloon dat automatisch wordt geselecteerd" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "Standaard sjabloon voorraad onderdeel" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "Standaard label van voorraadlocatie" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "Foutrapportages ontvangen" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "Meldingen ontvangen van systeemfouten" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Prijs" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Eindpunt" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "Eindpunt waarop deze webhook wordt ontvangen" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "Naam van deze webhook" msgid "Active" msgstr "Actief" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "Is deze webhook actief" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Geheim" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Koptekst" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "Aan gewerkt" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Titel" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Gepubliceerd" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Samenvatting" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Gelezen" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Afbeelding" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "Afbeelding" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Symbool" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definitie" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Contact e-mailadres" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3827,7 @@ msgstr "Standaardvaluta die gebruikt wordt voor dit bedrijf" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Bedrijf" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Basis onderdeel" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Onderdeel selecteren" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Fabrikant selecteren" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "Fabrikant artikel nummer (MPN)" msgid "URL for external manufacturer part link" msgstr "URL voor externe link van het fabrikant onderdeel" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "Omschrijving onderdeel fabrikant" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Parameternaam" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Waarde" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Parameterwaarde" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Eenheden" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Parameter eenheden" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderd #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Leverancier" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Selecteer fabrikant onderdeel" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Opmerking" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "basisprijs" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "meerdere" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Order meerdere" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4170,11 @@ msgstr "Bedrijf verwijderen" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "Afbeelding onderdeel" @@ -4316,15 +4193,15 @@ msgstr "Afbeelding downloaden van URL" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Klant" msgid "Uses default currency" msgstr "Gebruik standaard valuta" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adres" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Telefoon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "Fabrikant onderdeel verwijderen" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Intern onderdeel" @@ -4530,7 +4407,7 @@ msgstr "Geen fabrikanten informatie beschikbaar" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Leveranciersonderdeel" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "Geen leveranciersinformatie beschikbaar" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Nieuw voorraadartikel aanmaken" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nieuw Voorraadartikel" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Bedrijven" msgid "New Company" msgstr "Nieuw Bedrijf" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Geplaatst" -#: label/models.py:120 -msgid "Label name" -msgstr "Labelnaam" - -#: label/models.py:128 -msgid "Label description" -msgstr "Label beschrijving" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "Label template bestand" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Ingeschakeld" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Label template is ingeschakeld" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Breedte [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Label breedte, gespecificeerd in mm" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Hoogte [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Label hoogte, gespecificeerd in mm" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Bestandsnaam Patroon" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Totaalprijs" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Inkooporder" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,577 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Link naar externe pagina" -#: order/models.py:299 +#: order/models.py:311 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:313 +#: order/models.py:325 msgid "Created By" msgstr "Aangemaakt Door" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "Gebruiker of groep verantwoordelijk voor deze order" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Orderreferentie" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Inkooporder status" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "Bedrijf waar de artikelen van worden besteld" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "Leveranciersreferentie" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "Order referentiecode van leverancier" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "ontvangen door" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Datum van uitgifte" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Order uitgegeven op datum" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "Hoeveelheid moet een positief getal zijn" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "Order kan niet worden voltooid omdat er geen onderdelen aangewezen zijn" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Productie uitvoer is al voltooid" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "Order kan niet worden geannuleerd" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 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:1013 +#: order/models.py:1043 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:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "verwijderd" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Ontvangen" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Waar wil de inkoper dat dit artikel opgeslagen wordt?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtueel onderdeel kan niet worden toegewezen aan een verkooporder" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Verkoopprijs" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Verzonden" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Zending" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:1848 +#: order/models.py:1899 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:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Regel" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Artikel" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "Artikelen" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "De volgende serienummers zijn al toegewezen" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Kwijt" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Retour" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "In Behandeling" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Retour" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Herstel" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Vervangen" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Restitutie" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Afwijzen" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Achterstallige inkooporder" @@ -5553,7 +5417,7 @@ msgstr "Order markeren als voltooid" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Order Voltooien" @@ -5563,13 +5427,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Order Referentie" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Order Beschrijving" @@ -5578,19 +5442,19 @@ msgid "No suppplier information available" msgstr "Geen leveranciersinformatie beschikbaar" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "Afgeronde artikelen" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Incompleet" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Uitgegeven" @@ -5600,15 +5464,15 @@ msgstr "Totale kosten" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "Totale kosten konden niet worden berekend" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5526,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5572,6 @@ msgstr "Order is al verwerkt. Bestanden kunnen niet meer worden geüpload." msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "Artikelen" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Ontvangen Voorraadartikelen" @@ -5729,7 +5584,7 @@ msgstr "Inkooporder Artikelen" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Artikel toevoegen" @@ -5778,30 +5633,30 @@ msgid "Print packing list" msgstr "Pakbon afdrukken" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "Klantreferentie" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5674,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Voltooi Verkooporder" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "Deze Verkooporder is niet volledig toegewezen" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5741,12 @@ msgstr "{part} stukprijs bijgewerkt naar {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "{part} stukprijs bijgewerkt naar {price} en aantal naar {qty}" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "Onderdeel-id" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Onderdeel naam" @@ -5895,20 +5755,20 @@ msgstr "Onderdeel naam" msgid "Part Description" msgstr "Onderdeel omschrijving" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5777,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5793,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5810,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Onderdelen" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "Binnenkomende Inkooporder" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "Uitgaande Verkooporder" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "Geproduceerde voorraad door Productieorder" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "Voorraad vereist voor Productieorder" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standaard locatie" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Totale Voorraad" @@ -6112,698 +5976,712 @@ msgstr "Totale Voorraad" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Onderdeel Categorie" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Onderdeel Categorieën" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Standaard locatie voor onderdelen in deze categorie" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Onderdelen mogen niet rechtstreeks aan een structurele categorie worden toegewezen, maar kunnen worden toegewezen aan subcategorieën." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Onderdeel naam" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "Standaardleverancier" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "Eenheden voor dit onderdeel" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Datum" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Aantal onderdelen" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Ingeschakeld" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "Parameternaam" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Parameterwaarde" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6699,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6715,299 @@ msgstr "Geen onderdelen geselecteerd" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Parameters kopiëren" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Ongeldige hoeveelheid" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7159,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7257,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "Onderdeelfabrikanten" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7324,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Label afdrukken" @@ -7468,7 +7346,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7395,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7418,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7441,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7512,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Voorraad" @@ -7681,7 +7559,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7631,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7711,7 @@ msgstr "Afbeelding van onderdeel niet gevonden" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7777,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Onvoldoende voorraad beschikbaar" @@ -7994,20 +7872,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7899,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7953,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7977,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8005,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8021,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8118,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8181,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8274,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Bestandsnaam Patroon" + +#: report/models.py:203 +msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:204 +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Breedte [mm]" + +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Label breedte, gespecificeerd in mm" + +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Hoogte [mm]" + +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Label hoogte, gespecificeerd in mm" + +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "Filters inkooporder" - -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "Verkooporder zoekopdracht filters" - -#: report/models.py:569 -msgid "Return order query filters" -msgstr "" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" -msgstr "" - -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "Vereist Voor" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Stukprijs" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "Totaal" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Serienummer" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8687,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8712,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Voorraadlocaties" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Aandacht nodig" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Beschadigd" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Verwoest" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Afgewezen" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "In quarantaine geplaatst" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Verouderde volgcode" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Voorraaditem gemaakt" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Bewerken voorraadartikel" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Serienummer toegewezen" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Voorraad geteld" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Voorraad handmatig toegevoegd" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Voorraad handmatig verwijderd" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Locatie veranderd" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Voorraad bijgewerkt" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Gemonteerd" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Gedemonteerd" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Geïnstalleerd componentartikel" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Verwijderd componentartikel" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Splits van bovenliggend item" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Splits onderliggende item" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Samengevoegde voorraadartikelen" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Geconverteerd naar variant" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Product aangemaakt" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Product voltooid" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Build order uitvoer afgewezen" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Verbruikt door productieorder" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Verzonden onder verkooporder" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Ontvangen onder verkooporder" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Geretourneerd onder retourorder" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Naar klant verzonden" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Geretourneerd door klant" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9450,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9470,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9497,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Voorraad tellen" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9516,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Voorraad overzetten" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9562,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Product" @@ -9497,7 +9628,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Geen locatie ingesteld" @@ -9528,40 +9659,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9756,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "U staat niet in de lijst van eigenaars van deze locatie. Deze voorraadlocatie kan niet worden bewerkt." -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Maak nieuwe voorraadlocatie" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Nieuwe Locatie" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10007,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10051,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10089,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Bericht" @@ -10141,7 +10276,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Verwijderen" @@ -10162,7 +10297,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10363,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10385,7 @@ msgid "Home Page" msgstr "Startpagina" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10420,7 @@ msgstr "Verkooporder Instellingen" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10519,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10742,26 @@ msgstr "Bevestigen" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10962,7 @@ msgid "The following parts are low on required stock" msgstr "De volgende onderdelen hebben een lage vereiste voorraad" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Vereiste Hoeveelheid" @@ -10841,7 +10976,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11141,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11331,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11351,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11406,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11575,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12021,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12058,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12091,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12140,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12266,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12504,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12528,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12544,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12764,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12777,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12834,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12888,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12908,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12999,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13061,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13418,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13426,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14072,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14309,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index 290d59e772..482a4ae280 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API-endepunkt ikke funnet" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Brukeren har ikke rettigheter til å se denne modellen" @@ -56,26 +56,26 @@ msgstr "Feildetaljer kan finnes i admin-panelet" msgid "Enter date" msgstr "Oppgi dato" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Notater" @@ -132,7 +132,7 @@ msgstr "Det oppgitte e-postdomenet er ikke godkjent." msgid "Registration is disabled." msgstr "Registrering er deaktivert." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Tyrkisk" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamesisk" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Kinesisk (forenklet)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Kinesisk (tradisjonell)" @@ -351,145 +355,145 @@ msgstr "E-post" msgid "Error running plugin validation" msgstr "Feil under validering av utvidelse" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metadata må være et python dict-objekt" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Utvidelse-metadata" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "JSON-metadatafelt, for bruk av eksterne utvidelser" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Uriktig formatert mønster" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Ukjent formatnøkkel spesifisert" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Mangler nødvendig formatnøkkel" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Referansefeltet kan ikke være tomt" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referansen må samsvare påkrevd mønster" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referansenummeret er for stort" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Fil mangler" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Mangler eksternlenke" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Vedlegg" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Velg fil å legge ved" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Lenke" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Lenke til ekstern URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Kommentar" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Kommentar til fil" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Bruker" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "opplastet dato" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Filnavn kan ikke være tomt" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Ugyldig vedleggskatalog" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Filnavn inneholder ugyldig tegn '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Filnavn mangler filtype" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Vedlegg med dette filnavnet finnes allerede" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Feil ved endring av filnavn" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikatnavn kan ikke eksistere under samme overordnede" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Ugyldig valg" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "overkategori" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Markdown-notater (valgfritt)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Strekkodedata" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Tredjeparts strekkodedata" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Strekkode-hash" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Unik hash av strekkodedata" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Eksisterende strekkode funnet" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Serverfeil" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Må være et gyldig tall" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URLtil ekstern bildefil" msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Sjekk av bakgrunnsarbeider mislyktes" @@ -694,202 +698,6 @@ msgstr "E-post backend ikke konfigurert" msgid "InvenTree system health checks failed" msgstr "InvenTree's-systemets helsesjekker mislyktes" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Ventende" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Plassert" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Fullført" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Kansellert" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Tapt" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Returnert" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Pågående" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Sendt" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Trenger oppmerksomhet" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Skadet" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Ødelagt" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Avvist" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "I Karantene" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Gammel lagervare sporingsoppføring" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Lagevare opprettet" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Redigerte lagervare" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Tildelte serienummer" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Lager opptelt" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Lagerbeholdning manuelt lagt til" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Lagerbeholdning manuelt fjernet" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Posisjon endret" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Lagerbeholdning oppdatert" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Montert i sammenstilling" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Fjernet fra sammenstilling" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Montert komponentartikkel" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Fjernet komponentartikkel" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Skill ut fra overordnet artikkel" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Skill ut fra underartikkel" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Sammenslåtte lagervarer" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Konvertert til variant" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Produksjonsartikkel opprettet" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Produksjonsartikkel fullført" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Produksjonsartikkel avvist" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Brukt av produksjonsordre" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Sendt mot salgsordre" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Mottatt mot innkjøpsordre" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Returnert mot returordre" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Sendt til kunde" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Returnert av kunde" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Produksjon" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Retur" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Reparasjon" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Erstatt" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Refusjon" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Avvis" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Ukjent database" @@ -938,45 +746,45 @@ msgstr "Systeminformasjon" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Spores" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Tildelt" msgid "Available" msgstr "Tilgjengelig" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Produksjonsordre" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Produksjonsordre" msgid "Build Orders" msgstr "Produksjonsordrer" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Ugyldig valg for overordnet produksjon" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Produksjonsordrens del kan ikke endres" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referanse" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Kort beskrivelse av produksjonen (valgfritt)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Overordnet produksjon" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Produksjonsordre som denne produksjonen er tildelt" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Velg del å produsere" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Salgsordrereferanse" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Salgsordren denne produksjonen er tildelt til" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Kildeplassering" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Fullført plassering" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Velg plassering der fullførte artikler vil bli lagret" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Produksjonsmengde" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Antall lagervarer å produsere" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Fullførte artikler" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Antall lagervarer som er fullført" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Produksjonsstatus" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Opprettelsesdato" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Forventet sluttdato" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Fullført dato" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "fullført av" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Utstedt av" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Produksjonsprioritet" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Prosjektkode" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Produksjonsordre {build} er fullført" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Antall" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Monteres i" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Lagervare for montering" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Automatisk tildeling av serienummer" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "Følgende serienummer finnes allerede eller er ugyldige" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "En liste over produksjonsartikler må oppgis" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Plassering" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Automatisk tildeling av serienummer" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "Følgende serienummer finnes allerede eller er ugyldige" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "En liste over produksjonsartikler må oppgis" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" -msgstr "Fjern tildelt lagerbeholdning" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Trekk fra all lagerbeholdning som allerede er tildelt denne produksjonen" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:653 +#: build/serializers.py:681 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:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part må peke på den samme delen som produksjonsordren" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Tildelt lagerbeholdning" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "I bestilling" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Ventende" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Produksjon" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Kansellert" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Fullført" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Lagerbeholdning kreves for produksjonsordre" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Forfalt produksjonsordre" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Lagerbeholdning er ikke fullt tildelt til denne Produksjonsordren" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Måldato" @@ -1846,7 +1697,7 @@ msgstr "Denne produksjonsordren forfalt %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Fullførte byggeresultater" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Salgsordre" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Utstedt av" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Prioritet" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "Slett Produksjonsordre" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "Produksjonsordrens QR-kode" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "Koble Strekkode til Produksjonsordre" @@ -1911,8 +1762,8 @@ msgstr "Lagerkilde" msgid "Stock can be taken from any available location." msgstr "Lagervare kan hentes fra alle tilgengelige plasseringer." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Destinasjon" @@ -1926,10 +1777,10 @@ msgstr "Tildelte deler" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Opprettet" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Ingen måldato satt" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Fullført" @@ -2043,11 +1894,11 @@ msgstr "Vedlegg" msgid "Build Notes" msgstr "Produksjonsnotater" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "Tildeling fullført" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "Alle linjer er fullt tildelt" @@ -2125,1458 +1976,1485 @@ msgstr "Prosjektbeskrivelse" msgid "User or group responsible for this project" msgstr "Bruker eller gruppe ansvarlig for dette prosjektet" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Innstillingsnøkkel (må være unik - ufølsom for store of små bokstaver)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Innstillings verdi" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "Valgt verdi er ikke et gyldig alternativ" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Verdien må være en boolsk verdi" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Verdien må være et heltall" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Ingen gruppe" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Et tomt domene er ikke tillatt." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Ugyldig domenenavn: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Ingen programtillegg" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Omstart kreves" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "En innstilling har blitt endret som krever en omstart av serveren" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Ventende migrasjoner" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "Antall ventende databasemigreringer" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Navn på serverinstans" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "Strengbeskrivelse for serverinstansen" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Bruk instansnavn" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Bruk instansnavnet på tittellinjen" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Begrens visning av 'om'" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Vis `about`-modal kun til superbrukere" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Firmanavn" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Internt firmanavn" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Base-URL" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "Base-URL for serverinstans" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "Velg grunnvalutaen for prisberegninger" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "Oppdateringsintervall for valuta" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hvor ofte valutakurser skal oppdateres (sett til null for å deaktiverere)" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "dager" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "Valutaoppdaterings-plugin" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "Valgt valutaoppdaterings-plugin" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Last ned fra URL" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "Tillat nedlastning av eksterne bilder og filer fra ekstern URL" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Nedlastingsgrense" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "User-Agent brukt for å laste ned fra URL" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "Streng URL-validering" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "Krev skjemaspesifikasjon ved validering av URLer" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Krev bekreftelse" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Krev eksplisitt brukerbekreftelse for visse handlinger." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Tredybde" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Standard tredybde for trevisning. Dypere nivåer kan lastes inn ved behov." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Intervall for oppdateringssjekk" -#: common/models.py:1369 +#: common/models.py:1370 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/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Automatisk sikkerhetskopiering" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Automatisk sikkerhetskopieringsintervall" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Angi antall dager mellom automatiske sikkerhetskopieringshendelser" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Slettingsintervall for oppgaver" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "Slettingsintervall for feillogg" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "Feilloggene vil bli slettet etter et angitt antall dager" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "Slettingsintervall for varsler" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "Brukervarsler slettes etter angitt antall dager" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Strekkodestøtte" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "Aktiver støtte for strekkodeleser i webgrensesnittet" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Innlesingsforsinkelse for strekkode" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Tidsforsinkelse for behandling av strekkode" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Støtte for strekkodewebkamera" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "Tillat strekkodelesning via webkamera i nettleseren" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "Delrevisjoner" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Aktiver revisjonsfeltet for Del" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "IPN regex" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulært uttrykksmønster for matching av internt delnummer" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Tilat duplikat av internt delnummer" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme interne delnummer" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Tillat redigering av internt delnummer" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "Tillat endring av IPN-verdien mens du redigerer en del" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Kopier BOM-data fra del" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopier BOM-data som standard når du dupliserer en del" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Kopier parameterdata fra del" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopier parameterdata som standard ved duplisering av en del" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Kopier testdata fra del" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Kopier designmaler for kategoriparametere" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Kopier parametermaler for kategori ved oppretting av en del" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Mal" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Sammenstilling" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponent" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Salgbar" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Sporbar" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuelle" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Vis import i visninger" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Vis importveiviseren i noen deler visninger" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Vis relaterte deler" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Vis relaterte deler i en del" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Innledende lagerbeholdningsdata" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "Tillat oppretting av innledende lagerbeholdning når en ny del opprettes" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Innledende leverandørdata" -#: common/models.py:1542 +#: common/models.py:1549 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/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Visningsformat for delnavn" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Format for å vise delnavnet" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Standardikon for delkategorier" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "Standardikon for delkategorier (tomt betyr ingen ikon)" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "Tving parameterenheter" -#: common/models.py:1562 +#: common/models.py:1569 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/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Minimum antall desimalplasser for priser" -#: common/models.py:1570 +#: common/models.py:1577 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/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalt antall desimalplasser for priser" -#: common/models.py:1578 +#: common/models.py:1585 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/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Bruk leverandørpriser" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inkluder leverandørprisbrudd i beregninger av totalpriser" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Innkjøpshistorikkoverstyring" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historiske innkjøpspriser overstyrer leverandørprisnivåer" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Bruk lagervarepriser" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Bruk priser fra manuelt innlagte lagervarer for prisberegninger" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Lagervare prisalder" -#: common/models.py:1610 +#: common/models.py:1617 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/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Bruk Variantpriser" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "Inkluder variantpriser i beregninger av totale priser" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Kun aktive varianter" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "Bruk kun aktive variantdeler til beregning av variantprising" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "Intervall for rekalkulering av priser" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "Antall dager før delpriser blir automatisk oppdatert" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Interne Priser" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Aktiver interne priser for deler" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Intern prisoverstyring" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "Hvis tilgjengelig, overstyrer interne priser kalkulering av prisområde" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Aktiver etikettutskrift" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Aktiver utskrift av etiketter fra nettleseren" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Etikettbilde-DPI" -#: common/models.py:1662 +#: common/models.py:1669 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/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Aktiver Rapporter" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Aktiver generering av rapporter" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Feilsøkingsmodus" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Generer rapporter i feilsøkingsmodus (HTML-output)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Sidestørrelse" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Standard sidestørrelse for PDF-rapporter" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Aktiver Testrapporter" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Aktiver generering av testrapporter" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Legg ved testrapporter" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Når det skrives ut en Testrapport, legg ved en kopi av Testrapporten på den assosierte Lagervaren" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "Globalt Unike Serienummer" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummer for lagervarer må være globalt unike" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Automatisk tildeling av Serienummer" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Aumatisk fyll ut serienummer i skjemaer" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Slett oppbrukt lagerbeholdning" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "Batchkodemal" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "Mal for generering av standard batchkoder for lagervarer" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Lagerbeholdning utløper" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "Selg utløpt lagerbeholdning" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "Tillat salg av utgått lagerbeholdning" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Foreldet lagerbeholdning tidsintervall" -#: common/models.py:1747 +#: common/models.py:1754 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/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Produsér Utløpt Lagerbeholdning" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Tillat produksjon med utløpt lagerbeholdning" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "Kontroll over eierskap av lagerbeholdning" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "Aktiver eierskap over lagerplasseringer og -varer" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "Lagerplassering standard ikon" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "Lagerplassering standard ikon (tomt betyr ingen ikon)" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "Vis installerte lagervarer" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "Vis installerte lagervarer i lagertabeller" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Produksjonsordre-referansemønster" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "Nødvendig mønster for å generere Produksjonsordre-referansefeltet" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "Aktiver returordrer" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "Aktiver returordrefunksjonalitet i brukergrensesnittet" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "Returordre-referansemønster" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "Rediger fullførte returordrer" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "Tillat redigering av returordrer etter de er fullført" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "Salgsordre-referansemønster" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "Påkrevd mønster for å generere salgsordrereferansefelt" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "Salgsordre standard fraktmetode" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "Rediger fullførte salgsordrer" -#: common/models.py:1857 +#: common/models.py:1872 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/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark Shipped Orders as Complete" +msgstr "Merk ordren som fullført" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/models.py:1879 +#: common/models.py:1902 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/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "Autofullfør innkjøpsordrer" -#: common/models.py:1887 +#: common/models.py:1910 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/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "Aktiver SSO-registrering" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Aktiver selvregistrering via SSO for brukere på innloggingssiden" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "E-postadresse kreves" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "Krevt at brukere angir e-post ved registrering" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO-brukere" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO-kontodata" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "E-post to ganger" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "Spør brukeren om e-post to ganger ved registrering" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Passord to ganger" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "Spør brukeren om passord to ganger ved registrering" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Tillatte domener" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Begrens registrering til bestemte domener (kommaseparert, begynner med @)" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Gruppe ved registrering" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "Gruppe nye brukere blir tilknyttet ved registrering" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/models.py:1968 +#: common/models.py:1991 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/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "Aktiver URL-integrasjon" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "Tillat utvidelser å legge til URL-ruter" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrasjon" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "Tillat utvidelser å integrere mot navigasjon" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "Aktiver app-integrasjon" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "Tillat utvidelser å legge til apper" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "Aktiver tidsplanintegrasjon" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "Tillat utvidelser å kjøre planlagte oppgaver" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrasjon" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "Tillat utvidelser å reagere på interne hendelser" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "Aktiver prosjektkoder" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "Aktiver prosjektkoder for å spore prosjekter" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "Varetellingsfunksjonalitet" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Aktiver varetellingsfunksjonalitet for å registrere lagernivåer og regne ut lagerverdi" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "Ekskluder eksterne plasseringer" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Eksluder lagervarer i eksterne plasseringer fra varetellinger" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "Automatisk varetellingsperiode" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Antall dager mellom automatisk varetellingsregistrering (sett til null for å deaktivere)" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "Rapportslettingsintervall" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Varetellingsrapporter vil slettes etter angitt antall dager" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "Vis brukernes fulle navn" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "Vis brukernes fulle navn istedet for brukernavn" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Innstillingsnøkkel (må være unik - ufølsom for store og små bokstaver" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "Skjul inaktive elementer" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Skjul inaktive deler i resultater som vises på hjemmesiden" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Vis abonnerte deler" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Vis abonnerte deler på startsiden" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Vis abonnerte kategorier" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Vis abonnerte delkatekorier på startsiden" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Vis nyeste deler" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Vis nyeste deler på startsiden" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Vis stykklister som venter på validering på startsiden" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Vis nylige lagerendringer" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Vis nylig endrede lagervarer på startsiden" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Vis lav lagerbeholdning" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Vis lave lagervarer på startsiden" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Vis tomme lagervarer" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Vis tom lagerbeholdning på startsiden" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Vis nødvendig lagerbeholdning" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Vis lagervarer som trengs for produksjon på startsiden" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Vis utløpt lagerbeholdning" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Vis utløpte lagervarer på startsiden" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Vis foreldet lagerbeholdning" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Vis foreldet lagerbeholdning på startsiden" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Vis ventende produksjoner" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Vi ventende produksjoner på startsiden" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Vis forfalte produksjoner" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Vis forfalte produksjoner på startsiden" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "Vis utestående Innkjøpsordrer" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "Vis utestående Innkjøpsordrer på startsiden" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Vis forfalte Innkjøpsordrer" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "Vis forfalte Innkjøpsordrer på startsiden" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "Vis utestående Salgsordrer" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "Vis utestående Salgsordrer på startsiden" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Vis forfalte SOer" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "Vis forfalte SOer på startsiden" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "Vis ventende SO-forsendelser" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "Vis ventende SO-forsendelser på startsiden" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Vis Nyheter" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Vis nyheter på startsiden" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "Innebygd etikettvisning" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Vis PDF-etiketter i nettleseren fremfor å lastes ned som en fil" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "Standard etikettskriver" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "Konfigurer hvilken etikettskriver som skal være valgt som standard" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "Innebygd rapportvisning" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Vis PDF-rapporter i nettleseren fremfor å lastes ned som en fil" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Søk i Deler" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "Vis deler i forhåndsvsningsvinduet for søk" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "Søk i Leverandørdeler" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "Vis leverandørdeler i forhåndsvisningsvinduet for søk" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Søk i Produsentdeler" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "Vis produsentdeler i forhåndsvisningsvinduet for søk" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Skjul Inaktive Deler" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "Ekskluder inaktive deler fra forhåndsvisningsvinduet for søk" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "Søk i kategorier" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "Vis delkategorier i forhåndsvisningsvinduet for søk" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Søk i lagerbeholdning" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Vis lagervarer i forhåndsvisningsvinduet for søk" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Skjul utilgjengelige Lagervarer" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Ekskluder lagervarer som ikke er tilgjengelige fra forhåndsvisningsvinduet for søk" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Søk i Plasseringer" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "Vis lagerplasseringer i forhåndsvisningsvinduet for søk" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Søk i Firma" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "Vis firma i forhåndsvsningsvinduet for søk" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Søk i Produksjonsordrer" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Vis produksjonsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Søk i Innkjøpsordrer" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "Vis innkjøpsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Ekskluder inaktive Innkjøpsordrer" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "Ekskluder inaktive innkjøpsordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Søk i Salgsordrer" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "Vis salgsordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "Ekskluder Inaktive Salgsordrer" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "Ekskluder inaktive salgsordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Søk i Returordrer" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "Vis returordrer i forhåndsvisningsvinduet for søk" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "Ekskluder Inaktive Returordrer" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "Ekskluder inaktive returordrer fra forhåndsvisningsvinduet for søk" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "Forhåndsvisning av søkeresultater" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "Antall resultater å vise i hver seksjon av søkeresultatsforhåndsvisningen" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Regex-søk" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "Aktiver regulære uttrykk i søkeord" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "Helordsøk" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "Søk returnerer resultater for treff med hele ord" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Vis antall i skjemaer" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "Vis antall tilgjengelige deler i noen skjemaer" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "Escape-knappen lukker skjemaer" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "Bruk Escape-knappen for å lukke modal-skjemaer" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Fast navigasjonsbar" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "Navigasjonsbarens posisjon er fast på toppen av skjermen" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Datoformat" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Foretrukket format for å vise datoer" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Delplanlegging" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "Vis delplanleggingsinformasjon" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Lagertelling for Del" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Vis lagertellingsinformasjon for del (om lagertellingsfunksjonalitet er aktivert)" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "Tabellstrenglengde" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "Maksimal lengdegrense for tekst vist i tabeller" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "Standard etikettmal for del" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "Etikettmalen for del som velges automatisk" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "Standard etikettmal for lagervare" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "Etikettmalen for lagervare som velges automatisk" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "Standard etikettmal for lagerplassering" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "Etikettmalen for lagerplassering som velges automatisk" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "Motta feilrapporter" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "Motta varsler om systemfeil" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Pris" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "Enhetspris på spesifisert antall" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Endepunkt" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "Endepunktet hvor denne webhooken er mottatt" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "Navn for webhooken" msgid "Active" msgstr "Aktiv" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "Er webhooken aktiv" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "Sjetong" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "Vert" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "Verten denne meldingen ble mottatt fra" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Tittel" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Brødtekst" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "Innholdet i meldingen" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "Endepunktet meldingen ble mottatt fra" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Tittel" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Publisert" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Forfatter" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Sammendrag" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Les" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "Er dette nyhetselementet lest?" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Bilde" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "Bildefil" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "Enhetsnavn må være en gyldig identifikator" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "Enhetsnavn" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "Valgfritt enhetssymbol" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Definisjon" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "Enhetsdefinisjon" @@ -3736,7 +3614,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:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "Artikler mottatt" @@ -3752,63 +3630,63 @@ msgstr "Artikler har blitt mottatt mot en returordre" msgid "Error raised by plugin" msgstr "Feil oppstått i utvidelse" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "Kjører" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "Ventende oppgaver" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "Planlagte oppgaver" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "Mislykkede oppgaver" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "Oppgave-ID" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "Unik oppgave-ID" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "Lås" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "Låsetidspunkt" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "Oppgavenavn" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "Funksjon" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "Funksjonsnavn" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "Argumenter" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "Oppgaveargumenter" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "Nøkkelordargumenter" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "Nøkkelordargumenter for oppgave" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Kontakt e-post" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Kontakt" @@ -3949,7 +3827,7 @@ msgstr "Standardvaluta brukt for dette firmaet" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Firma" @@ -4041,19 +3919,19 @@ msgstr "Fraktnotater for internt bruk" msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Basisdel" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Velg del" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Velg produsent" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "Produsentens varenummer" msgid "URL for external manufacturer part link" msgstr "URL for ekstern produsentdel-lenke" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "Produsentens delbeskrivelse" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Produsentdeler" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Parameternavn" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Verdi" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Parameterverdi" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Enheter" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Parameterenheter" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "Pakkeenhetene må være komptible med delens basisenhet" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "Pakkeenhet må være mer enn null" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Leverandør" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Velg produsentdel" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "URL for ekstern leverandørdel-lenke" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Notat" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Emballasje" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Delemballasje" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "Pakkeantall" -#: company/models.py:871 +#: company/models.py:873 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:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "flere" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Bestill flere" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "Antall tilgjengelig fra leverandør" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "Tilgjengelighet oppdatert" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "Dato for siste oppdatering av tilgjengelighetsdata" @@ -4257,7 +4134,7 @@ msgstr "På lager" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Inaktiv" @@ -4293,11 +4170,11 @@ msgstr "Slett Firma" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "Bilde av del" @@ -4316,15 +4193,15 @@ msgstr "Last ned bilde fra URL" msgid "Delete image" msgstr "Slett bilde" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Kunde" msgid "Uses default currency" msgstr "Bruker standardvaluta" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adresse" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Fjern" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "Slett produsentdel" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Intern del" @@ -4530,7 +4407,7 @@ msgstr "Ingen produsentinformasjon tilgjengelig" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "Adresser" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Leverandørdel" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "Ingen leverandørinformasjon tilgjengelig" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "SKU-kode" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "Leverandørs lagerbeholdning" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Opprett ny lagervare" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Ny Lagervare" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Firmaer" msgid "New Company" msgstr "Nytt Firma" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Plassert" -#: label/models.py:120 -msgid "Label name" -msgstr "Etikettnavn" - -#: label/models.py:128 -msgid "Label description" -msgstr "Etikettbeskrivelse" - -#: label/models.py:136 -msgid "Label" -msgstr "Etikett" - -#: label/models.py:137 -msgid "Label template file" -msgstr "Etikett-malfil" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Aktivert" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Etikettmal er aktiver" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Bredde [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Etikettbredde, spesifisert i mm" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Høyde [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Etiketthøyde, spesifisert i mm" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Filnavnmønster" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "Mønster for generering av etikett-filnavn" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "Søkefiltre (kommaseparert liste over nøkkel=verdi-par)" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Filtre" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR-kode" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-kode" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Ukjent" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Total pris" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Ordrestatus" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "Ingen samsvarende innkjøpsordre funnet" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Ordre" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Innkjøpsordre" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Returordre" @@ -4976,517 +4780,577 @@ msgstr "Ordrevaluta" 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:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "Kontakten samsvarer ikke med valgt firma" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "Ordrebeskrivelse (valgfritt)" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "Velg prosjektkode for denne ordren" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Lenke til ekstern side" -#: order/models.py:299 +#: order/models.py:311 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:313 +#: order/models.py:325 msgid "Created By" msgstr "Opprettet av" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "Bruker eller gruppe ansvarlig for ordren" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "Kontaktpunkt for denne ordren" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "Selskapsadresse for denne ordren" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Ordrereferanse" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Status for innkjøpsordre" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "Firma som varene blir bestilt fra" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "Leverandørreferanse" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "Leverandørens ordrereferanse" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "mottatt av" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Sendt dato" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Dato bestillingen ble sendt" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "Dato ordre ble fullført" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "Delleverandør må matche PO-leverandør" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "Mengde må være positiv" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "Firma som varene selges til" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Kundereferanse " -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "Kundens ordrereferanse" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Forsendelsesdato" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "sendt av" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "Bestillingen kan ikke fullføres da ingen deler er tilordnet" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Produksjonsartikkelen er allerede fullført" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "Ordren kan ikke kanselleres" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "Kun en åpen ordre kan merkes som fullført" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser" -#: order/models.py:1013 +#: order/models.py:1043 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:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Antall" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "Linjereferanse" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "Linjenotater" -#: order/models.py:1296 +#: order/models.py:1345 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:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "Linjeelementbeskrivelse (valgfritt)" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "Kontekst" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "Ytterligere kontekst for denne linjen" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Enhetspris" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "Delens leverandør må samsvare med leverandør" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "slettet" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Leverandørdel" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Mottatt" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Innkjøpspris" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Enhet-innkjøpspris" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Hvor vil innkjøper at artikkelen skal lagres?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "Virtuell del kan ikke tildeles salgsordre" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "Kun salgbare deler kan tildeles en salgsordre" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Salgspris" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Enhets-salgspris" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Sendt" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Sendt antall" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Dato for forsendelse" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Leveringsdato" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "Dato for levering av forsendelse" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Sjekket Av" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Forsendelse" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Forsendelsesnummer" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Sporingsnummer" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Sporingsinformasjon for forsendelse" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "Referansenummer for tilknyttet faktura" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "Forsendelsen er allerede sendt" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "Forsendelsen har ingen tildelte lagervarer" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "Lagervarer er ikke blitt tildelt" -#: order/models.py:1848 +#: order/models.py:1899 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:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "Salgsordre samsvarer ikke med forsendelse" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "Forsendelsen samsvarer ikke med salgsordre" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Linje" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "Forsendelsesreferanse for salgsordre" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Artikkel" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "Velg lagervare å tildele" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Angi lagertildelingsmengde" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "Returordre-referanse" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "Firmaet delen skal returneres fra" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "Returordrestatus" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "Kun serialiserte artikler kan tilordnes en Returordre" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "Velg artikkel som skal returneres fra kunde" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "Mottatt Dato" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "Datoen denne returartikkelen ble mottatt" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Utfall" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "Utfall for dette linjeelementet" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "Linjeelementer" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "Linjeelementet samsvarer ikke med innkjøpsordre" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Heltallsverdi må angis for sporbare deler" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "Følgende serienummer er allerede tildelt" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:1684 +#: order/serializers.py:1688 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:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "Valuta for linje" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Tapt" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Returnert" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Pågående" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Retur" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Reparasjon" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Erstatt" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Refusjon" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Avvis" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Forfalt Innkjøpsordre" @@ -5553,7 +5417,7 @@ msgstr "Merk ordren som fullført" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Fullfør ordre" @@ -5563,13 +5427,13 @@ msgstr "Miniatyrbilde for leverandør" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Ordrereferanse" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Ordrebeskrivelse" @@ -5578,19 +5442,19 @@ msgid "No suppplier information available" msgstr "Ingen leverandørinformasjon tilgjengelig" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "Fullførte elementer" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Ufullstendig" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Utstedt" @@ -5600,15 +5464,15 @@ msgstr "Total kostnad" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "Total kostnad kunne ikke beregnes" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5526,11 @@ msgstr "Duplikatvalg" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5572,6 @@ msgstr "Ordren er allerede behandlet. Filer kan ikke lastes opp." msgid "Step %(step)s of %(count)s" msgstr "Trinn %(step)s av %(count)s" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "Linjeelementer" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Mottatt lagerbeholdning" @@ -5729,7 +5584,7 @@ msgstr "Innkjøpsordreartikler" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Legg til linjeelement" @@ -5778,30 +5633,30 @@ msgid "Print packing list" msgstr "Skriv ut pakkeliste" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "Kundereferanse" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Total kostnad" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5674,30 @@ msgid "Ship Items" msgstr "Send artikler" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Fullfør Salgsordre" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "Salgsordren er ikke fullstendig tildelt" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5741,12 @@ msgstr "Oppdaterte {part} enhetspris to {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "Oppdaterte {part} enhetspris til {price} og antall til {qty}" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "Del-ID" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Delnavn" @@ -5895,20 +5755,20 @@ msgstr "Delnavn" msgid "Part Description" msgstr "Delbeskrivelse" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Revisjon" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Nøkkelord" @@ -5917,15 +5777,15 @@ msgstr "Nøkkelord" msgid "Part Image" msgstr "Del-bilde" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "Kategori-ID" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "Kategorinavn" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "Standard plasserings-ID" @@ -5933,11 +5793,11 @@ msgstr "Standard plasserings-ID" msgid "Default Supplier ID" msgstr "Standard leverandør-ID" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Variant av" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" @@ -5950,160 +5810,164 @@ msgstr "Brukt i" msgid "Building" msgstr "Produseres" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "Overordnet ID" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "Overordnet navn" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "Sti til kategori" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Deler" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "BOM-nivå" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "BOM artikkel-ID" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "Overodnet IPN" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "Del -IPN" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Minstepris" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Makspris" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "Innkommende innkjøpsordre" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "Utgående salgsordre" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "Lagervarer produsert av en produksjonsordre" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "Lagervarer påkrevd for produksjonsordre" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "Gyldig" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "Dette alternativet må være valgt" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Kategori" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Standard plassering" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Total lagerbeholdning" @@ -6112,698 +5976,712 @@ msgstr "Total lagerbeholdning" msgid "Input quantity for price calculation" msgstr "Sett inn antall for prisberegning" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Delkategori" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Delkategorier" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Standardplassering for deler i denne kategorien" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Strukturell" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Deler kan ikke tilordnes direkte til en strukturell kategori, men kan tilordnes til underkategorier." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Standard nøkkelord" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "Standard nøkkelord for deler i denne kategorien" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Ikon" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Du kan ikke gjøre denne delkategorien strukturell fordi noen deler allerede er tilordnet den!" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "Ugyldig valg for overordnet del" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, 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:551 +#: part/models.py:594 #, 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:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN må samsvare med regex-mønsteret {pattern}" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "Lagervare med dette serienummeret eksisterer allerede" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplikat av internt delnummer er ikke tillatt i delinnstillinger" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "Del med dette Navnet, internt delnummer og Revisjon eksisterer allerede." -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "Deler kan ikke tilordnes strukturelle delkategorier!" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Delnavn" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "Er Mal" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "Er delen en maldel?" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "Er delen en variant av en annen del?" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "Delbeskrivelse (valgfritt)" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "Delkategori" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Internt delnummer" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "Hvor er denne artikkelen vanligvis lagret?" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Standard leverandør" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "Standard leverandørdel" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "Standard utløp" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "Minimum tillatt lagernivå" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "Måleenheter for denne delen" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "Kan denne delen bygges fra andre deler?" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "Kan denne delen brukes til å bygge andre deler?" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "Har denne delen sporing av unike artikler?" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "Kan denne delen kjøpes inn fra eksterne leverandører?" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "Kan denne delen selges til kunder?" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Er denne delen aktiv?" -#: part/models.py:1051 +#: part/models.py:1094 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:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "Kontrollsum for BOM" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "Lagret BOM-kontrollsum" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "Stykkliste sjekket av" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "Stykkliste sjekket dato" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Opprettingsbruker" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "Siste lagertelling" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "Antall" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Dato" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "Flere notater" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "Bruker som utførte denne lagertellingen" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Rapport" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "Lagertellingsrapportfil (generert internt)" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Antall deler" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "Antall deler dekket av varetellingen" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "Bruker som forespurte varetellingsrapporten" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "Testmaler kan bare bli opprettet for sporbare deler" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Aktivert" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3506 +#: part/models.py:3549 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:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3513 +#: part/models.py:3556 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:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "Valg må være unike" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "Parameternavn" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Sjekkboks" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "Valg" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "Overordnet del" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parametermal" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Parameterverdi" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Standardverdi" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "Del-ID eller delnavn" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "Unik del-ID-verdi" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "Delens interne delnummerverdi" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "Nivå" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "BOM-nivå" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4048 +#: part/models.py:4091 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:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Svinn" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Forventet produksjonssvinn (absolutt eller prosent)" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Tillat Varianter" -#: part/models.py:4096 +#: part/models.py:4139 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:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4419 +#: part/models.py:4462 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:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" @@ -6821,7 +6699,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" @@ -6837,299 +6715,299 @@ msgstr "Ingen deler valgt" msgid "Select category" msgstr "Velg kategori" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Kopier parametere" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:480 +#: part/serializers.py:490 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:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Begrens lagerbeholdningsrapport til en bestemt del og enhver variant av delen" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Begrens lagerbeholdningsrapport til en bestemt delkategori og alle underkategorier" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Begrens lagerbeholdningsrapport til en bestemt plasering og eventuelle underplasseringer" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "Ekskluder ekstern lagerbeholdning" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "Ekskluder lagervarer i eksterne lokasjoner" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Generer rapport" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "Genererer rapport som inneholder beregnede lagerdata" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "Oppdater deler" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "Oppdater spesifiserte deler med beregnede lagerbeholdningsdata" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "Lagerbeholdningsfunksjonalitet er ikke aktivert" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, 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:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "Nullstill eksisterende BOM" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "Fjern eksisterende BOM-artikler før opplastning" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "Ingen del-kolonne angitt" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "Flere samsvarende deler funnet" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "Ingen samsvarende del funnet" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "Delen er ikke betegnet som en komponent" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "Antall ikke oppgitt" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Ugyldig antall" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "Minst en BOM-artikkel kreves" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "Totalt Antall" @@ -7281,7 +7159,7 @@ msgstr "Legg til lagertellingsinformasjon" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "Lagertelling" @@ -7379,15 +7257,15 @@ msgstr "Deleleverandører" msgid "Part Manufacturers" msgstr "Deleprodusenter" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7324,7 @@ msgstr "Abonner på varsler for denne delen" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Skriv ut etikett" @@ -7468,7 +7346,7 @@ msgstr "Tell delbeholdning" msgid "Transfer part stock" msgstr "Overfør delbeholdning" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "Delhandlinger" @@ -7517,7 +7395,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Delen er virtuall (ikke en fysisk del)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "Vis detaljer for del" @@ -7540,7 +7418,7 @@ msgid "Minimum stock level" msgstr "Minimalt lagerbeholdningsnivå" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7441,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7512,8 @@ msgstr "Varianter" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Lagerbeholdning" @@ -7681,7 +7559,7 @@ msgstr "Rediger" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Sist oppdatert" @@ -7753,7 +7631,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7711,7 @@ msgstr "Bilde for del ikke funnet" msgid "Part Pricing" msgstr "Delprising" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7777,8 @@ msgstr "Strekkoden samsvarer ikke med eksisterende lagervare" msgid "Stock item does not match line item" msgstr "Lagervare samsvarer ikke med linjeelement" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Utilstrekkelig lagerbeholdning" @@ -7994,20 +7872,20 @@ msgstr "Forsendelsen er allerede levert" msgid "Quantity to allocate" msgstr "Antall å tildele" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "Utskrift av etikett mislyktes" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7899,7 @@ msgstr "Gir innebygd støtte for strekkoder" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7953,19 @@ msgstr "InvenTree valutautveksling" msgid "Default currency exchange integration" msgstr "Standard valutaintegrasjon" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF etikettskriver" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "Gir innebygd støtte for å skrive ut PDF-etiketter" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "Feilsøkingsmodus" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Aktiver feilsøkingsmodus - returnerer rå HTML i stedet for PDF" @@ -8099,11 +7977,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8005,7 @@ msgstr "Kantlinjer" msgid "Print a border around each label" msgstr "Skriv ut en kant rundt hver etikett" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "Liggende" @@ -8143,11 +8021,11 @@ msgstr "InvenTree etikett-ark skriver" msgid "Arrays multiple labels onto a single sheet" msgstr "Sprer ut flere etiketter på ett enkelt ark" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "Etiketten er for stor for sidestørrelse" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "Ingen etiketter ble generert" @@ -8240,61 +8118,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "Konfigurasjon av utvidelse" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "Konfigurasjon av utvidelser" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "Nøkkel" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "Utvidelsens \"Key\"" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "Navn på utvidelsen" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "Pakkenavn" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "Er utvidelsen aktiv" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Installert" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "Eksempel-utvidelse" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Innebygd utvidelse" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Utvidelse" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "Metode" @@ -8302,17 +8181,17 @@ msgstr "Metode" msgid "No author found" msgstr "Ingen forfatter funnet" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Utvidensen '{p}' er ikke kompatibel med nåværende InvenTree-versjon {v}" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Utvidelsen krever minst versjon {v}" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Utvidelsen krever maks versjon {v}" @@ -8395,279 +8274,363 @@ msgstr "Installasjonen ble ikke bekreftet" msgid "Either packagename of URL must be provided" msgstr "Enten pakkenavn eller URL må angis" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "Full omlasting" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "Utfør en full omlasting av utvidelsesregisteret" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "Tvangsomlasting" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Tving en omlasting av utvidelsesregisteret, selv om det allerede er lastet" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "Hent inn utvidelser" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "Hent inn utvidelser og legg dem til i registeret" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "Aktivér utvidelse" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "Aktivér denne utvidelsen" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Ingen gyldige objekter angitt for mal" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Malfil '{template}' mangler eller eksisterer ikke" -#: report/api.py:319 -msgid "Test report" -msgstr "Testrapport" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Malnavn" -#: report/models.py:183 -msgid "Report template file" -msgstr "Rapportmalfil" +#: report/models.py:156 +msgid "Template description" +msgstr "" -#: report/models.py:190 -msgid "Report template description" -msgstr "Beskrivelse av rapportmal" +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "Rapportrevisjonsnummer (øker automatisk)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Filnavnmønster" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Filtre" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "Sidestørrelse for PDF-rapporter" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "Generer rapport i landskapsorientering" -#: report/models.py:318 -msgid "Pattern for generating report filenames" -msgstr "Mønster for å generere rapportfilnavn" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Bredde [mm]" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "Rapportmal er aktiver" +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Etikettbredde, spesifisert i mm" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "Lagervare-søkefilter (kommaseparert liste over nøkkel=verdi-par)" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Høyde [mm]" -#: report/models.py:354 -msgid "Include Installed Tests" -msgstr "Inkluder installerte tester" +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Etiketthøyde, spesifisert i mm" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" -msgstr "Inkluder testresultater for lagervarer installert i sammenstilt artikkel" - -#: report/models.py:424 -msgid "Build Filters" -msgstr "Produksjonsfiltre" - -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "Produksjons-søkefilter (kommaseparert liste over nøkkel=verdi-par" - -#: report/models.py:464 -msgid "Part Filters" -msgstr "Delfiltre" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "Del-søkefilter (kommaseparert liste over nøkkel=verdi-par" - -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "Innkjøpsordre-søkefilter" - -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "Salgsordre-søkefilter" - -#: report/models.py:569 -msgid "Return order query filters" -msgstr "Returordre-søkefilter" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:648 +#: report/models.py:444 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "" + +#: report/models.py:448 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:456 +msgid "Report Template" +msgstr "" + +#: report/models.py:463 report/models.py:486 +msgid "Output File" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" +msgstr "" + +#: report/models.py:475 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 msgid "Snippet" msgstr "Snutt" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "Rapportsnuttfil" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "Filbeskrivelse for snutt" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "Ressurs" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "Rapportressursfil" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "Ressursfilbeskrivelse" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" -msgstr "spørringsfiltre for lagerplassering (kommadelt liste av nøkkel=verdi-par)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR-kode" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-kode" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Nødvendige materialer" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "Kreves for" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "Leverandør ble slettet" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Enhetspris" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "Ekstra linjeelementer" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Serienummer" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Artikler ved lagerplassering" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "Testrapport for lagervare" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "Testresultater" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Resultat" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "Bestått" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "Mislykket" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "Ingen resultat (obligatorisk)" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "Ingen resultat" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Installerte artikler" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Serienummer" @@ -8724,7 +8687,7 @@ msgstr "Leverandørnavn" msgid "Customer ID" msgstr "Kunde-ID" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Installert i" @@ -8749,555 +8712,723 @@ msgstr "Gjennomgang kreves" msgid "Delete on Deplete" msgstr "Slett når oppbrukt" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "Utløpsdato" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Ekstern plassering" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "Del-tre" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "Utløpsdato før" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Foreldet" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "Antall kreves" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "Gyldig del må oppgis" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "Oppgitt leverandørdel eksisterer ikke" -#: stock/api.py:938 +#: stock/api.py:974 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:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienumre kan ikke angis for en ikke-sporbar del" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "Lagerplasseringstype" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "Lagerplasseringstyper" -#: stock/models.py:90 +#: stock/models.py:86 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:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Lagerplassering" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Lagerplasseringer" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Eier" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Velg eier" -#: stock/models.py:167 +#: stock/models.py:175 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:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Ekstern" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "Dette er en ekstern lagerplassering" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Plasseringstype" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "Lagerplasseringstype for denne plasseringen" -#: stock/models.py:254 +#: stock/models.py:262 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:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" -#: stock/models.py:670 +#: stock/models.py:687 #, 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:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 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:683 +#: stock/models.py:700 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:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "Elementet kan ikke tilhøre seg selv" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "Elementet må ha en produksjonsrefereanse om is_building=True" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "Produksjonsreferanse peker ikke til samme del-objekt" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Overordnet lagervare" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "Basisdel" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "Er denne artikkelen montert i en annen artikkel?" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "Lagerantall" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "Kildeproduksjon" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "Produksjon for denne lagervaren" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Brukt av" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "Produksjonsordren som brukte denne lagervaren" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "Kildeinnkjøpsordre" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Innkjøpsordre for denne lagervaren" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "Tildelt Salgsordre" -#: stock/models.py:885 +#: stock/models.py:902 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:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "Slett når oppbrukt" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "Slett lagervaren når beholdningen er oppbrukt" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "Innkjøpspris per enhet på kjøpstidspunktet" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "Konvertert til del" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "Delen er ikke angitt som sporbar" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "Antall må være heltall" -#: stock/models.py:1479 +#: stock/models.py:1504 #, 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:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "Serienumre må være en liste over tall" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "Antallet stemmer ikke overens med serienumrene" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "Lagervare har blitt tildelt en salgsordre" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "Lagervare er montert i en annen artikkel" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "Lagervare inneholder andre artikler" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "Lagervare har blitt tildelt til en kunde" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "Lagervare er for tiden i produksjon" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "Duplisert lagervare" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "Lagervarer må referere til samme del" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "Lagervarer må referere til samme leverandørdel" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "Lagerstatuskoder må være like" -#: stock/models.py:1870 +#: stock/models.py:1905 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:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "Oppføringsnotater" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "Verdi må angis for denne testen" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "Vedlegg må lastes opp for denne testen" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "Testens verdi" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "Vedlegg til testresultat" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "Testnotater" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "Serienummeret er for høyt" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Bruk pakningsstørrelse når du legger til: antall definert er antall pakker" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "Angi antall lagervarer som skal serialiseres" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "Til Lagerplassering" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummer kan ikke tilordnes denne delen" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "Velg lagervare å montere" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "Antall å installere" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "Angi antallet elementer som skal installeres" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "Legg til transaksjonsnotat (valgfritt)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "Antall å installere må være minst 1" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "Lagervaren er utilgjengelig" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "Valgt del er ikke i stykklisten" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "Antall å installere må ikke overskride tilgjengelig antall" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "Lagerplassering for den avinstallerte artikkelen" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "Velg del å konvertere lagervare til" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "Valgt del er ikke et gyldig alternativ for konvertering" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "Lagerplassering for returnert artikkel" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "Velg lagervarer for å endre status" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "Tillat forskjellig status" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "Minst to lagervarer må oppgis" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "Lagervare primærnøkkel verdi" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "Lagervare statuskode" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "Lager transaksjonsnotater" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Trenger oppmerksomhet" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Skadet" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Ødelagt" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Avvist" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "I Karantene" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Gammel lagervare sporingsoppføring" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lagevare opprettet" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Redigerte lagervare" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Tildelte serienummer" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Lager opptelt" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Lagerbeholdning manuelt lagt til" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Lagerbeholdning manuelt fjernet" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Posisjon endret" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Lagerbeholdning oppdatert" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Montert i sammenstilling" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Fjernet fra sammenstilling" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Montert komponentartikkel" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Fjernet komponentartikkel" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Skill ut fra overordnet artikkel" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Skill ut fra underartikkel" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Sammenslåtte lagervarer" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Konvertert til variant" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Produksjonsartikkel opprettet" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Produksjonsartikkel fullført" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Produksjonsartikkel avvist" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Brukt av produksjonsordre" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Sendt mot salgsordre" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Mottatt mot innkjøpsordre" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Returnert mot returordre" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Sendt til kunde" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Returnert av kunde" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "Lager-sporingsinformasjon" @@ -9319,7 +9450,7 @@ msgstr "Testdata" msgid "Test Report" msgstr "Testrapport" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "Slett testdata" @@ -9339,11 +9470,11 @@ msgstr "Installerte lagervarer" msgid "Install Stock Item" msgstr "Installer lagervare" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "Slett alle testresultater for denne lagervaren" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9497,17 @@ msgid "Stock adjustment actions" msgstr "Lagerjusteringshandlinger" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Tell beholdning" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "Legg til lagerbeholdning" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "Fjern lagerbeholdning" @@ -9385,12 +9516,12 @@ msgid "Serialize stock" msgstr "Serialiser lager" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Overfør lagerbeholdning" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "Tilordne til kunde" @@ -9431,7 +9562,7 @@ msgid "Delete stock item" msgstr "Slett lagervare" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Produksjon" @@ -9497,7 +9628,7 @@ msgid "Available Quantity" msgstr "Tilgjengelig antall" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Ingen plassering satt" @@ -9528,40 +9659,40 @@ msgstr "Denne lagervaren utløper %(item.expiry_date)s" msgid "No stocktake performed" msgstr "Ingen lagertelling utført" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "Velg en av variantdelene oppført under." -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Advarsel" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "Denne handlingen er vanskelig å omgjøre" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9756,32 @@ msgstr "Plasseringens Eier" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Du er ikke i listen over eiere av denne plasseringen. Denne lagerplasseringen kan ikke redigeres." -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Opprett ny lagerplassering" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Ny plassering" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10007,12 @@ msgstr "Innstillinger for innlogging" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Utgående e-post har ikke blitt kanskje. Noen innloggings- og registreringsfunksjoner fungerer kanskje ikke korrekt!" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Registrering" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10051,11 @@ msgstr "URL-segment" msgid "Part Settings" msgstr "Innstillinger for del" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "Import av Del" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "Importér Del" @@ -9954,36 +10089,36 @@ msgstr "Innstillinger for Utvidelser" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "Endring av innstillingene nedenfor krever at du umiddelbart starter serveren på nytt. Ikke endre under aktiv bruk." -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Utvidelser" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Installer Utvidelse" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "Last utvidelser på nytt" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "Eksterne utvidelser er ikke aktivert for denne InvenTree-installasjonen" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "Utvidelse feilstack" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "Stadium" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Melding" @@ -10141,7 +10276,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Slett" @@ -10162,7 +10297,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10363,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "Ny plasseringstype" @@ -10250,7 +10385,7 @@ msgid "Home Page" msgstr "Startside" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10420,7 @@ msgstr "Innstillinger for salgsordre" msgid "Stock Settings" msgstr "Instillinger for lager" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "Lagerplasseringstyper" @@ -10384,49 +10519,49 @@ msgstr "Sett opp multifaktor" msgid "Remove multifactor" msgstr "Fjern multifaktor" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Aktive økter" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "Logg ut aktive økter (unntatt denne)" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "Logg Ut Aktive Økter" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "ukjent på ukjent" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "ukjent" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "IP-adresse" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Enhet" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Siste aktivitet" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s siden (denne økten)" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s siden" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10742,26 @@ msgstr "Bekreft" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Denne e-postbekreftelseslenken er utgått eller ugyldig. Vennligst send en ny bekreftelsesforespørsel." -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Logg inn" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "Ikke medlem?" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Registrer deg" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Glemt passord?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "eller logg på med" @@ -10827,7 +10962,7 @@ msgid "The following parts are low on required stock" msgstr "Følgende deler har for lav lagerbeholdning" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Antall som kreves" @@ -10841,7 +10976,7 @@ msgid "Click on the following link to view this part" msgstr "Klikk på følgende lenke for å se denne delen" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "Minimum antall" @@ -11006,7 +11141,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11331,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11351,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11406,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11575,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12021,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12058,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12091,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Skjemafeil eksisterer" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12140,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12266,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12504,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12528,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12544,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12764,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12777,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12834,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12888,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12908,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12999,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13061,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13418,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Legg til" @@ -13327,180 +13426,180 @@ msgstr "Legg til" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14072,22 @@ msgstr "Lagre" msgid "Show all notifications and history" msgstr "Vis alle varsler og historikk" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR-data ikke oppgitt" @@ -14194,35 +14309,34 @@ msgstr "Sist gang tokenet ble brukt" msgid "Revoked" msgstr "Tilbakekalt" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Tillatelse satt" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Gruppe" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Visning" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Tillatelse til å se elementer" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Tillatelse til å legge til elementer" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Endre" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Tillatelse til å endre elementer" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Tillatelse til å slette elementer" - diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index 66c4f00316..c2a5554875 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" @@ -56,26 +56,26 @@ msgstr "Szczegóły błędu można znaleźć w panelu administracyjnym" msgid "Enter date" msgstr "Wprowadź dane" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Uwagi" @@ -132,7 +132,7 @@ msgstr "Podany e-mail domeny nie został zatwierdzony." msgid "Registration is disabled." msgstr "Rejestracja jest wyłączona." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turecki" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Wietnamski" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "chiński (uproszczony)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "chiński (tradycyjny)" @@ -351,145 +355,145 @@ msgstr "Adres E-Mail" msgid "Error running plugin validation" msgstr "Błąd podczas walidacji wtyczki" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metadane muszą być obiektem typu dict w Python" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Wtyczka Metadane" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Pole metadanych JSON, do użycia przez wtyczki zewnętrzne" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Nieprawidłowo sformatowany wzór" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Określono nieznany format klucza" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Brak wymaganego formatu klucza" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Pole odniesienia nie może być puste" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Odniesienie musi być zgodne z wymaganym wzorem" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Numer odniesienia jest zbyt duży" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Brak pliku" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Załącznik" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Wybierz plik do załączenia" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Łącze" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Komentarz" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Komentarz pliku" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Użytkownik" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "data przesłania" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Nazwa pliku nie może być pusta" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Nieprawidłowy katalog załącznika" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Nazwa pliku zawiera niedozwolony znak '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Brak rozszerzenia w nazwie pliku" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Załącznik o tej nazwie już istnieje" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Błąd zmiany nazwy pliku" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikaty nazw nie mogą istnieć pod tym samym rodzicem" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Błędny wybór" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "nadrzędny" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Ścieżka" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Notatki Markdown (opcjonalne)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Dane kodu kreskowego" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Dane kodu kreskowego stron trzecich" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Hasz kodu kreskowego" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Unikalny hasz danych kodu kreskowego" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Znaleziono istniejący kod kreskowy" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Błąd serwera" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "Adres URL zdalnego pliku obrazu" msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Sprawdzenie robotnika w tle nie powiodło się" @@ -694,202 +698,6 @@ msgstr "Nie skonfigurowano backendu e-mail" msgid "InvenTree system health checks failed" msgstr "Sprawdzanie poziomu zdrowia InvenTree nie powiodło się" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "W toku" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Umieszczony" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Zakończono" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Anulowano" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Zagubiono" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Zwrócone" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "W trakcie" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Wysłane" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Wymaga uwagi" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Uszkodzone" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Zniszczone" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Odrzucone" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Poddany kwarantannie" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Starsze śledzenie wpisów stanu magazynowego" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Utworzono element magazynowy" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Edytuj pozycję magazynową" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Przypisano numer seryjny" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Zapas policzony" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Zapas dodany ręcznie" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Zapas usunięty ręcznie" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Lokalizacja zmieniona" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Zaktualizowano stan magazynu" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Zainstalowano do montażu" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Usunięto z montażu" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Zainstalowano element komponentu" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Usunięto element komponentu" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Podziel z pozycji nadrzędnej" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Podziel element podrzędny" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Scalone przedmioty magazynowe" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Przekonwertowano na wariant" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Dane wyjściowe kolejności kompilacji utworzone" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Dane wyjściowe kolejności kompilacji ukończone" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Odrzucono wynik zlecenia produkcji" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Zużyte przez kolejność kompilacji" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Wysłane na podstawie zlecenia sprzedaży" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Otrzymane na podstawie zlecenia zakupu" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Zwrócone na podstawie zlecenia zwrotu" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Wyślij do klienta" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Zwrócony od klienta" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Produkcja" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Zwrot" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Naprawa" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Wymiana" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Zwrot pieniędzy" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Odrzuć" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Nieznana baza danych" @@ -938,45 +746,45 @@ msgstr "Informacja systemowa" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:238 +#: build/api.py:255 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:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Śledzony" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Przydzielono" msgid "Available" msgstr "Dostępne" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Zlecenie Budowy" msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Nieprawidłowy wybór kompilacji nadrzędnej" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Nie można zmienić elementu kompletacji" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referencja" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Krótki opis produkcji (opcjonalny)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Zamówienie budowy, do którego budowa jest przypisana" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Komponent" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:240 +#: build/models.py:270 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:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Priorytet budowy" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Kod projektu" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, 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:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Ilość" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Automatycznie przydzielaj numery seryjne" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Lokalizacja" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Automatycznie przydzielaj numery seryjne" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" -msgstr "Usuń przydzielone zasoby" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Odejmij wszystkie zasoby, które zostały już przypisane do tej produkcji" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "W Zamówieniu" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "W toku" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Produkcja" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Anulowano" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Zakończono" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Data docelowa" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Zamówienie zakupu" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Dodane przez" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Priorytet" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "Źródło magazynu" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Przeznaczenie" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "Partia" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Utworzony" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Zakończone" @@ -2043,11 +1894,11 @@ msgstr "Załączniki" msgid "Build Notes" msgstr "Notatki tworzenia" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "Opis projektu" msgid "User or group responsible for this project" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "Wybrana wartość nie jest poprawną opcją" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Wartość musi być wartością binarną" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Wartość musi być liczbą całkowitą" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Brak grupy" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Pusta domena nie jest dozwolona." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Niepoprawna nazwa domeny: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Brak wtyczki" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Wymagane ponowne uruchomienie" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "Zmieniono ustawienie, które wymaga restartu serwera" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Oczekujące migracje" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "Liczba oczekujących migracji bazy danych" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Nazwa instancji serwera" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Użyj nazwy instancji" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Nazwa firmy" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Wewnętrzna nazwa firmy" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Bazowy URL" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Domyślna waluta" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "Interwał aktualizacji waluty" -#: common/models.py:1313 +#: common/models.py:1314 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/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "dni" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "Wtyczka aktualizacji waluty" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/models.py:1328 +#: common/models.py:1329 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/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Limit rozmiaru pobierania" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "Ścisła weryfikacja adresu URL" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "Wymagaj specyfikacji schematu podczas sprawdzania poprawności adresów URL" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Wymagaj potwierdzenia" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Wymagaj wyraźnego potwierdzenia dla określonych działań." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Głębokość drzewa" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Domyślna głębokość drzewa dla widoku drzewa. Głębsze poziomy mogą być leniwe, gdy są potrzebne." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Częstotliwość sprawdzania aktualizacji" -#: common/models.py:1369 +#: common/models.py:1370 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/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Automatyczna kopia zapasowa" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Włącz automatyczną kopię zapasową bazy danych i plików multimedialnych" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Interwał automatycznego tworzenia kopii zapasowych" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Określ liczbę dni między zdarzeniami automatycznej kopii zapasowej" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Interwał usuwania zadań" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Szablon" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Złożenie" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Komponent" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Możliwość śledzenia" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Wirtualny" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Rozmiar strony" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Włącz generowanie raportów testów" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark Shipped Orders as Complete" +msgstr "Oznacz zamówienie jako zakończone" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "Automatycznie wypełniaj zlecenia zakupu" -#: common/models.py:1887 +#: common/models.py:1910 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/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "Włącz samodzielną rejestrację dla użytkowników na stronach logowania" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich adres e-mail" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Klucz ustawień (musi być unikalny - niewrażliwy na wielkość liter" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Pokaż obserwowane części" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Pokaż obserwowane części na stronie głównej" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Pokaż obserwowane kategorie" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Pokaż obserwowane kategorie części na stronie głównej" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Pokaż najnowsze części" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Pokaż najnowsze części na stronie głównej" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Pokaż niski stan magazynowy" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Pokaż elementy o niskim stanie na stronie głównej" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Pokaż wymagany stan zapasów" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Szukaj części" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Ukryj nieaktywne części" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Wyszukaj zlecenia zakupu" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Wyklucz nieaktywne zlecenia zakupu" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Pokaż ilość w formularzach" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Stały pasek nawigacyjny" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Format daty" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Preferowany format wyświetlania dat" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Planowanie komponentów" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Cena" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "Aktywny" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Sekret" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Nagłówek" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Zawartość" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Autor" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Obraz" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Kontaktowy adres e-mail" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Kontakt" @@ -3949,7 +3827,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Firma" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Część bazowa" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Wybierz część" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Wybierz producenta" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "Numer producenta komponentu" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Komponent producenta" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Wartość" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Jednostki" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Jednostki parametru" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Dostawca" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Uwaga" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Opakowanie" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Opakowanie części" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "wielokrotność" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "Na stanie" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Nieaktywny" @@ -4293,11 +4170,11 @@ msgstr "Usuń firmę" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "Pobierz obraz z adresu URL" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Klient" msgid "Uses default currency" msgstr "Używa domyślnej waluty" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adres" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "Usuń komponent producenta" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Komponent wewnętrzny" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Utwórz nowy towar" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Nowy towar" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Firmy" msgid "New Company" msgstr "Nowa firma" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Umieszczony" -#: label/models.py:120 -msgid "Label name" -msgstr "Nazwa etykiety" - -#: label/models.py:128 -msgid "Label description" -msgstr "Opis etykiety" - -#: label/models.py:136 -msgid "Label" -msgstr "Etykieta" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Aktywne" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Szerokość [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Wysokość [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Wzór nazwy pliku" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Filtry" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Cena całkowita" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Status zamówienia" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "Nie znaleziono pasującego zlecenia zakupu" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Zamówienie" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,577 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "Utworzony przez" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "odebrane przez" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Data wydania" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Data wystawienia zamówienia" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Budowanie wyjścia jest już ukończone" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "Zamówienie nie może zostać anulowane" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Odebrane" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Gdzie kupujący chce przechowywać ten przedmiot?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Wysłane" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Linia" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Komponent" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "Pozycja nie pasuje do zlecenia zakupu" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Zagubiono" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Zwrócone" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "W trakcie" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Zwrot" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Naprawa" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Wymiana" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Zwrot pieniędzy" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Odrzuć" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Zaległe zlecenie zakupu" @@ -5553,7 +5417,7 @@ msgstr "Oznacz zamówienie jako zakończone" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Kompletne zamówienie" @@ -5563,13 +5427,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Numer zamówienia" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Opis zamówienia" @@ -5578,19 +5442,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Niekompletny" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Wydany" @@ -5600,15 +5464,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5526,11 @@ msgstr "Duplikuj wybrane" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5572,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5584,7 @@ msgstr "Pozycje zlecenia zakupu" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Dodaj element zamówienia" @@ -5778,30 +5633,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Całkowity Koszt" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5674,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5741,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "ID komponentu" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Nazwa komponentu" @@ -5895,20 +5755,20 @@ msgstr "Nazwa komponentu" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Wersja" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Słowa kluczowe" @@ -5917,15 +5777,15 @@ msgstr "Słowa kluczowe" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "ID kategorii" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5793,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Wariant" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" @@ -5950,160 +5810,164 @@ msgstr "Użyte w" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "Ścieżka kategorii" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Części" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "IPN komponentu" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "Nadchodzące zlecenie zakupu" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "Ważny" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "Ta opcja musi być zaznaczona" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Kategoria" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Domyślna lokalizacja" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5976,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Kategoria komponentu" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Kategorie części" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Domyślna lokalizacja dla komponentów w tej kategorii" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Domyślne słowa kluczowe" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "Nieprawidłowy wybór dla części nadrzędnej" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:1023 +#: part/models.py:1066 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:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:1051 +#: part/models.py:1094 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:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "Ostatnia inwentaryzacja" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Data" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Aktywne" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Wymagane" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "Część nadrzędna" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "Dane" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Wartość parametru" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Wartość domyślna" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "Unikalny wartość ID komponentu" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "Wartość IPN części" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "Poziom" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6699,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" @@ -6837,299 +6715,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Kopiuj parametry" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "Wyczyść istniejący BOM" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "Nie podano ilości" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Nieprawidłowa ilość" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7159,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7257,15 @@ msgstr "Dostawcy Części" msgid "Part Manufacturers" msgstr "Producenci części" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7324,7 @@ msgstr "Włącz powiadomienia dla tej części" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Drukuj etykietę" @@ -7468,7 +7346,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7395,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Część jest wirtualna (nie fizyczna)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7418,7 @@ msgid "Minimum stock level" msgstr "Minimalny poziom stanu magazynowego" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7441,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7512,8 @@ msgstr "Warianty" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Stan" @@ -7681,7 +7559,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Ostatnia aktualizacja" @@ -7753,7 +7631,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7711,7 @@ msgstr "Nie znaleziono obrazka części" msgid "Part Pricing" msgstr "Cennik części" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7777,8 @@ msgstr "Kod kreskowy nie pasuje do istniejących pozycji magazynowych" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7872,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7899,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7953,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7977,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8005,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8021,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8118,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "Konfiguracja wtyczki" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "Konfiguracja wtyczek" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "Klucz" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "Klucz wtyczki" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "Nazwa wtyczki" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "Nazwa pakietu" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "Czy wtyczka jest aktywna" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Zainstalowane" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Wtyczka wbudowana" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Wtyczka" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "Metoda" @@ -8302,17 +8181,17 @@ msgstr "Metoda" msgid "No author found" msgstr "Nie znaleziono autora" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8274,363 @@ msgstr "Instalacja nie została potwierdzona" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "Pełne przeładowanie" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "Wykonaj pełne przeładowanie rejestru wtyczek" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "Wymuś przeładowanie" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "Wymuś przeładowanie rejestru wtyczek, nawet jeśli jest już załadowany" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "Zbierz wtyczki" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "Zbierz wtyczki i dodaj je do rejestru" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "Aktywuj wtyczkę" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "Aktywuj tę wtyczkę" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Brak prawidłowych obiektów do szablonu" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Plik szablonu '{template}' jest brakujący lub nie istnieje" -#: report/api.py:319 -msgid "Test report" -msgstr "Raporty z testów" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Nazwa szablonu" -#: report/models.py:183 -msgid "Report template file" -msgstr "Plik szablonu raportu" +#: report/models.py:156 +msgid "Template description" +msgstr "" -#: report/models.py:190 -msgid "Report template description" -msgstr "Opis szablonu raportu" +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "Numer zmiany raportu (przyrasta automatycznie)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Wzór nazwy pliku" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Filtry" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "Renderuj raport w orientacji poziomej" -#: report/models.py:318 -msgid "Pattern for generating report filenames" -msgstr "Wzorzec generowania nazw plików raportu" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Szerokość [mm]" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "Szablon raportu jest włączony" - -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Wysokość [mm]" + +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" -msgstr "Filtr części" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "Filtry zapytania zleceń zakupu" - -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:648 +#: report/models.py:475 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 msgid "Snippet" msgstr "Wycinek" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Cena jednostkowa" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "Razem" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Numer Seryjny" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Wynik" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "Zaliczone" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "Niezaliczone" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Zainstalowane elementy" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Numer seryjny" @@ -8724,7 +8687,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Zainstalowane w" @@ -8749,555 +8712,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "Data ważności" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Lokacje stanu magazynowego" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Właściciel" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Wybierz właściciela" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "Wyszukaj zlecenie zakupu" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Zlecenie zakupu dla tego towaru" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "Należy podać wartość dla tego testu" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "Wynik testu" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Wymaga uwagi" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Uszkodzone" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Zniszczone" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Odrzucone" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Poddany kwarantannie" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Starsze śledzenie wpisów stanu magazynowego" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Utworzono element magazynowy" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Edytuj pozycję magazynową" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Przypisano numer seryjny" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Zapas policzony" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Zapas dodany ręcznie" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Zapas usunięty ręcznie" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Lokalizacja zmieniona" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Zaktualizowano stan magazynu" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Zainstalowano do montażu" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Usunięto z montażu" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Zainstalowano element komponentu" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Usunięto element komponentu" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Podziel z pozycji nadrzędnej" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Podziel element podrzędny" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Scalone przedmioty magazynowe" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Przekonwertowano na wariant" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Dane wyjściowe kolejności kompilacji utworzone" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Dane wyjściowe kolejności kompilacji ukończone" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Odrzucono wynik zlecenia produkcji" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Zużyte przez kolejność kompilacji" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Wysłane na podstawie zlecenia sprzedaży" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Otrzymane na podstawie zlecenia zakupu" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Zwrócone na podstawie zlecenia zwrotu" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Wyślij do klienta" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Zwrócony od klienta" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9450,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9470,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9497,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Przelicz stan magazynowy" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "Usuń stan magazynowy" @@ -9385,12 +9516,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Przenieś stan magazynowy" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9562,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Budowa" @@ -9497,7 +9628,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Lokacje nie są ustawione" @@ -9528,40 +9659,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Ostrzeżenie" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9756,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Nowa lokalizacja" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10007,12 @@ msgstr "Ustawienia logowania" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Rejestracja" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10051,11 @@ msgstr "" msgid "Part Settings" msgstr "Ustawienia części" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "Import części" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "Import części" @@ -9954,36 +10089,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Wtyczki" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Instaluj wtyczkę" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "Błąd stosu wtyczki" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "Etap" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Wiadomość" @@ -10141,7 +10276,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Usuń" @@ -10162,7 +10297,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10363,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10385,7 @@ msgid "Home Page" msgstr "Strona główna" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10420,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10519,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Aktywne sesje" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "Wyloguj aktywne sesje (z wyjątkiem tej sesji)" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "Wyloguj aktywne sesje" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "nieznany na nieznanym" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "nieznany" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "Adres IP" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Urządzenie" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Ostatnia aktywność" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s temu (ta sesja)" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s temu" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10742,26 @@ msgstr "Potwierdź" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Ten link potwierdzający adres e-mail wygasł, bądź jest nieprawidłowy. Proszę o zażądanie nowego e-maila potwierdzającego adres e-mail." -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Zaloguj się" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Zarejestruj się" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Zapomniałeś hasła?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10962,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Wymagana ilość" @@ -10841,7 +10976,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "Minimalna ilość" @@ -11006,7 +11141,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11331,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11351,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11406,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11575,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12021,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12058,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12091,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Istnieją błędy formularza" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12140,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12266,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12504,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12528,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12544,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12764,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12777,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12834,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12888,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12908,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12999,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13061,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13418,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Dodaj" @@ -13327,180 +13426,180 @@ msgstr "Dodaj" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14072,22 @@ msgstr "Zapisz" msgid "Show all notifications and history" msgstr "Pokaż wszystkie powiadomienia i historię" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Dane QR nie zostały dostarczone" @@ -14194,35 +14309,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Uprawnienia nadane" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Grupa" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Widok" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Uprawnienie do wyświetlania przedmiotów" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Uprawnienie do dodawania przedmiotów" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Zmień" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Uprawnienie do edycji przedmiotów" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Uprawnienie do usuwania przedmiotów" - diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 63d0044f62..8463a77b8b 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -132,7 +132,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 2265c30193..0fa826eaff 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "У пользователя недостаточно прав для просмотра этой модели!" @@ -56,26 +56,26 @@ msgstr "Подробности об ошибке можно найти в пан msgid "Enter date" msgstr "Введите дату" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Записи" @@ -132,7 +132,7 @@ msgstr "Указанный домен электронной почты не у msgid "Registration is disabled." msgstr "Регистрация отключена." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "недопустимое количество" @@ -273,7 +273,7 @@ msgstr "Корейский" #: InvenTree/locales.py:35 msgid "Latvian" -msgstr "" +msgstr "Латышский" #: InvenTree/locales.py:36 msgid "Dutch" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Турецкий" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "Украинский" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Вьетнамский" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Китайский (Упрощенный)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Китайский (Традиционный)" @@ -351,145 +355,145 @@ msgstr "EMail" msgid "Error running plugin validation" msgstr "Ошибка запуска проверки плагина" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Метаданные должны быть объектом python dict" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Метаданные плагина" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Поле метаданных JSON для использования внешними плагинами" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Неправильно отформатированный шаблон" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Указан неизвестный ключ формата" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Отсутствует требуемый ключ формата" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Ссылочный идентификатор не может быть пустым" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Ссылка должна соответствовать шаблону {pattern}" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Номер ссылки слишком большой" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Файл не найден" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Вложения" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Выберите файл для вложения" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Ссылка" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Ссылка на внешний URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Комментарий" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Комментарий к файлу" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Пользователь" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "дата загрузки" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Имя файла не должно быть пустым" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Неверная директория вложений" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Имя файла содержит запрещенные символы '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Отсутствует расширение для имени файла" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Вложение с таким именем файла уже существует" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Ошибка переименования файла" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Повторяющиеся имена не могут существовать под одним и тем же родителем" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Неверный выбор" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Название" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Описание" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "родитель" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Путь" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Записи о скидке (необязательно)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Данные штрих-кода" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Данные стороннего штрих-кода" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Хэш штрих-кода" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Уникальный хэш данных штрих-кода" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Обнаружен существующий штрих-код" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Ошибка сервера" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Сервер зарегистрировал ошибку." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Должно быть действительным номером" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "ССЫЛКА файла изображения на удаленном msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Проверка фонового работника не удалась" @@ -694,202 +698,6 @@ msgstr "Сервер электронной почты не настроен" msgid "InvenTree system health checks failed" msgstr "Ошибка проверки состояния системы InvenTree" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Ожидаемый" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Размещены" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Готово" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Отменено" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Потерян" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Возвращено" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Выполняется" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Доставлено" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "Да" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Требует внимания" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Поврежденный" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Разрушено" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Отклоненный" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Карантин" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Отслеживание устаревших запасов" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Складская позиция создана" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Отредактированная складская позиция" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Присвоенный серийный номер" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Новое значение запасов установлено" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Запасы, добавленные вручную" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Запасы удаленные вручную" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Место хранения изменено" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Запас обновлен" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Установленно в производимую деталь" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Удалено из производимой детали" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Установленный компонент" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Удаленный компонент" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Отделить от родительского элемента" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Разбить дочерний элемент" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Объединенные складские позиции" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Преобразовать в разновидность" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Создан выход продукции для этого заказа на производство" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Продукция заказа на производство завершена" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Продукция заказа на производство отклонена" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Поглощен заказом на производство" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Отгружено по заказу на продажу" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Получено по заказу на поставку" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Возвращено по заказу на возврат" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Отправлено клиенту" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Возвращено от клиента" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Продукция" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Возврат" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Починить" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Заменить" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Возврат" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Отклонить" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Неизвестная база данных" @@ -938,45 +746,45 @@ msgstr "Информация о системе" msgid "About InvenTree" msgstr "О программе InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Расходники" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Необязательно" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Зарезервировано" msgid "Available" msgstr "Доступно" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Заказ на производство" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Заказ на производство" msgid "Build Orders" msgstr "Заказы на производство" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Неверный выбор для родительской сборки" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "Должен быть указан ответственный пользователь или группа" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Деталь заказа на производства не может быть изменена" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Отсылка" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Краткое описание заказа на производство (необязательно)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Заказ на производство, которому принадлежит этот заказ на производство" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Деталь" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Выберите деталь для производства" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Место хранения - источник" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Место хранения результата" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Количество производимых деталей" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Количество складских позиций для производства" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Произведенные детали" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Количество складских позиций, которые были произведены" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Статус заказа на производство" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты." -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "выполнено" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Создано" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Пользователь, создавший этот заказ на производство" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Приоритет производства" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Код проекта" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "Не удалось выгрузить задачу для распределения на сборку" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Заказ на производство {build} был завершен" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Объект производства" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Количество" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Установить в" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Целевая складская позиция" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Автоматически выделить серийные номера" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "Следующие серийные номера уже существуют или недействительны" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Необходимо представить список выхода деталей" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Расположение" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Автоматически выделить серийные номера" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "Для отслеживаемых частей должны быть указаны серийные номера" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "Следующие серийные номера уже существуют или недействительны" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "Необходимо представить список выхода деталей" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Статус" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, если запасы не были полностью распределены" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" -msgstr "Удалить зарезервированный запас" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Вычесть запасы, которые уже были зарезервированы для этого производства" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "Зарезервированные Запасы" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "В заказе" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Доступный запас" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Ожидаемый" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Продукция" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Отменено" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Готово" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Необходимый запас для заказа на производство" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Просроченный заказ сборки" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Остатки не были полностью зарезервированы для этого заказа на производство" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Целевая дата" @@ -1846,7 +1697,7 @@ msgstr "Производство было просрочено на %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Завершенная продукция" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Заказ на продажу" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Создано" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Приоритет" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "Удалить заказ на производство" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "QR-код заказа на производство" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "Привязать штрих-код для заказа на производство" @@ -1911,8 +1762,8 @@ msgstr "Источник запаса" msgid "Stock can be taken from any available location." msgstr "Остатки не могут быть получены из любого доступного места хранения." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Назначение" @@ -1926,10 +1777,10 @@ msgstr "Зарезервированные детали" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "Партия" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Создано" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Нет конечной даты" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Завершённые" @@ -1992,7 +1843,7 @@ msgstr "Зарезервировать Остатки" #: build/templates/build/detail.html:191 msgid "Order required parts" -msgstr "" +msgstr "Заказать необходимые части" #: build/templates/build/detail.html:192 #: templates/js/translated/purchase_order.js:795 @@ -2043,11 +1894,11 @@ msgstr "Файлы" msgid "Build Notes" msgstr "Записи производства" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "Резервирование Завершено" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "Все позиции были полностью зарезервированы" @@ -2125,1458 +1976,1485 @@ msgstr "Описание проекта" msgid "User or group responsible for this project" msgstr "Пользователь или группа, ответственные за этот проект" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Ключ настроек (должен быть уникальным - не чувствителен к регистрам)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Значения настроек" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "Выбранное значение не является допустимым" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Значение должно быть булевым" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Значение должно быть целым числом" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Строка ключа должна быть уникальной" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Нет группы" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Пустой домен не допускается." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Недопустимое доменное имя: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Нет плагина" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Требуется перезапуск" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "Настройки были изменены, что требует перезапуска сервера" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Ожидаемые миграции" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "Количество ожидаемых миграций базы данных" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Название сервера" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "Текстовое описание сервера" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Название инстанса" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Имя сервера в заголовке" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Ограничить отображение `О...`" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Показать `О...` только суперпользователям" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Название компании" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Внутреннее название компании" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Базовая ссылка" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "Базовая ссылка для экземпляра сервера" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Валюта по умолчанию" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "Выберите базовую валюту для расчета цены" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "Интервал обновления курса валют" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Как часто обновлять курс валют (установите \"ноль\", чтобы выключить)" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "дней" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "Плагин обновления валют" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "Модуль обновления валюты" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Скачать по ссылке" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "Разрешить загрузку удаленных изображений и файлов по внешнему URL" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Ограничение размера загрузки" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "Максимально допустимый размер загрузки для удалённого изображения" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "User-Agent, используемый для загрузки из URL" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "Строгая проверка URL-адреса" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "Требуется спецификация схемы при проверке URL-адресов" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Требуется подтверждение" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Требовать явное подтверждение пользователя для определенного действия." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Глубина дерева" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Глубина дерева по умолчанию для просмотра дерева. Глубокие уровни загружены по мере необходимости." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Интервал проверки обновлений" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Автоматическое резервное копирование" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Интервал резервного копирования" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "Укажите количество дней между событиями автоматического резервного копирования" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Интервал удаления задачи" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "Результаты фоновых задач будут удалены после указанного количества дней" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "Интервал удаления журнала ошибок" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "Интервал удаления уведомления" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "Уведомления пользователя будут удалены после указанного количества дней" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Поддержка штрих-кодов" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Задержка сканирования штрих-кода" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Время задержки обработки штрих-кода" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Поддержка веб-камер штрих-кодов" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "Ревизия детали" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Включить поле ревизии для элемента" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "Шаблон регулярного выражения для сопоставления IPN детали" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Разрешить нескольким элементам использовать один и тот же IPN" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "Разрешить изменение значения IPN при редактировании детали" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Скопировать данные BOM детали" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "Копировать данные BOM по умолчанию при дублировании детали" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Скопировать данные параметров детали" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "Копировать данных параметров по умолчанию при дублировании детали" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Скопировать данные тестирования детали" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "Копировать данные тестирования по умолчанию при дублировании детали" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Скопировать параметры по шаблону категории" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Копировать параметры по шаблону категории при создании детали" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Шаблон" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Производимая деталь" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Компонент" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Можно купить" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Можно продавать" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Детали продаются по умолчанию" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Отслеживание" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Виртуальная" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Детали являются виртуальными по умолчанию" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Показать Импорт в просмотре" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Отображать связанные детали для элемента" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Начальные данные о запасах" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Исходные данные о поставщике" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Формат отображения детали" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Формат для отображения имени детали" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Значок раздела по умолчанию" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Минимальные Цены Десятичные Значки" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "Макс. Цены десятичные знаки" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Использовать цены поставщика" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Изменить историю покупки" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Использовать цены из складских позиций" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Возраст цен складских позиций" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Использовать варианты цен" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Только Активные Варианты" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "Использовать только активные запчасти для расчета стоимости варианта" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "Интервал пересчета цен" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "Количество дней до автоматического обновления цены" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Внутренние цены" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Разрешить внутренние цены для частей" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Переопределение внутренней цены" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "При наличии внутренних цен переопределить ценовой диапазон" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Включить печать этикеток" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Включить печать этикеток из веб-интерфейса" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Изображение меток DPI" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Включить отчеты" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Включить генерацию отчетов" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Режим отладки" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Генерировать отчеты в режиме отладки (вывод HTML)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "Журнал ошибок отчета" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "Журнал ошибок, которые возникают при создании отчетов" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Размер страницы" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Размер страницы по умолчанию для PDF отчетов" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Включить отчеты" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Включить генерацию отчетов" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Прикрепить отчеты о тестах" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "При печати отчета о тестировании приложить копию тестового отчета к соответствующему складской позиции" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "Серийные номера для складских позиций должны быть уникальными глобально" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Срок годности Запасов" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Время Залежалости Запасов" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "Количество дней перед тем как складская единица будет считаться просроченной" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Разрешить использовать просроченные остатки в производстве" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "Показать установленные складские позиции" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "Отображать установленные складские позиции в складских таблицах" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Паттерн ссылки заказа на производство" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "Поле требуемого паттерна для создания ссылки заказа на производство" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "Включить заказы на возврат" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "A build order has been completed" +msgid "Mark Shipped Orders as Complete" +msgstr "Заказ на производство был завершен" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Редактировать завершенные заказы на покупку" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "Включить SSO" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Необходимо указать EMail" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "Написать дважды" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Пароль дважды" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Разрешенные домены" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Принудительное MFA" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "Пользователи должны использовать многофакторную безопасность." -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Проверять плагины при запуске" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Исключить складские позиции во внешних местах хранения из инвентаризации" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Показывать детали, на которые включены уведомления" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Показывать детали, на которые включены уведомления, на главной странице" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Показывать категории, на которые включены уведомления" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Показывать категории, на которые включены уведомления, на главной странице" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Показывать последние детали" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Показывать последние детали на главной странице" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Показывать BOMы, ожидающие проверки, на главной странице" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Показывать изменившиеся складские запасы" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Показывать складские позиции с недавно изменившимися запасами на главной странице" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Показывать низкие складские запасы" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Показывать складские позиции с низкими запасами на главной странице" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Показывать закончившиеся складские позиции" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Показывать закончившиеся складские позиции на главной странице" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Показывать требуемые складские позиции" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Показывать требуемые для производства складские позиции на главной странице" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Показывать складские позиции с истекшим сроком годности" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Показывать складские позиции с истёкшим сроком годности на главной странице" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Показывать залежалые складские позиции" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Показывать складские позиции с истекающим сроком годности на главной странице" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Показывать незавершённые производства" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Показывать незавершённые производства на главной странице" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Показывать просроченные производства" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Показывать просроченные производства на главной странице" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Показать просроченные заказы на производство" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Показать просроченные заказы на продажу" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Показывать новости" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Поиск Деталей" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Поиск Запасов" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Отображать складские позиции в окне предварительного просмотра поиска" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Скрыть недоступные складские позиции" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Исключить недоступные складские позиции из окна предварительного просмотра поиска" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Поиск мест хранения" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Поиск компаний" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Поиск заказов на производство" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Отображать заказы на производство в окне предварительного просмотра поиска" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Поиск заказов на продажу" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Поиск заказов на возврат" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Поиск по Regex" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Фиксированная панель навигации" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Формат даты" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Планирование деталей" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Инвентаризация детали" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "Шаблон складской позиции по умолчанию" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "Шаблон метки складской позиции для автоматического выбора" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Цена" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Конечная точка" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "Активный" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "Токен" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Токен для доступа" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Секрет" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "Хост" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Заголовок" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Тело" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "Работал над" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "Код" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Заголовок" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Опубликовано" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Автор" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Итого" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Читать" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Изображение" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "Файл изображения" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "Название единицы" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Символ" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Определение" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "Полученные элементы" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "Запущен" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "Ожидающие задачи" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "Запланированные задания" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "Невыполненные Задачи" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "Код задачи" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "Уникальный ID задачи" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "Заблокировать" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "Время блокировки" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "Название задачи" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "Функция" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "Имя функции" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "Аргументы" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "Аргументы задачи" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Контактный EMail" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Контакт" @@ -3949,7 +3827,7 @@ msgstr "Для этой компании используется валюта #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Компания" @@ -4041,19 +3919,19 @@ msgstr "Записи отправления для внутреннего пол msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Базовая деталь" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Выберите деталь" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Выберите производителя" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "Код производителя" msgid "URL for external manufacturer part link" msgstr "Ссылка на сайт производителя" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Деталь производителя" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Наименование параметра" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Значение" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Значение параметра" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Ед.изм" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Единицы измерения параметра" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Поставщик" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Код поставщика" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Выберите производителя части" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "Ссылка на сайт поставщика" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Запись" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Упаковка" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Упаковка детали" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "Кол-во в упаковке" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "множественные" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Кратность заказа" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "На складе" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Неактивный" @@ -4293,11 +4170,11 @@ msgstr "Удалить компанию" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "Изображение детали" @@ -4316,15 +4193,15 @@ msgstr "Скачать изображение по ссылке" msgid "Delete image" msgstr "Удалить изображение" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Покупатель" msgid "Uses default currency" msgstr "Использовать валюту по умолчанию" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Адрес" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Телефон" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "Удалить Изображение" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Удалить" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "Загрузить Изображение" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "Скачать изображение" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Внутренняя деталь" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "Адреса" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Деталь поставщика" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Создать новую складскую позицию" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Новая складская позиция" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Компании" msgid "New Company" msgstr "Новая компания" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Размещены" -#: label/models.py:120 -msgid "Label name" -msgstr "Имя метки" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "Метка" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Включено" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Ширина [мм]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Высота [мм]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Шаблон имени файла" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Фильтры" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR Код" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR код" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Неизвестно" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Общая стоимость" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Статсу заказа" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "Имеет цену" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Заказ" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Заказ на закупку" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Заказ на возврат" @@ -4976,517 +4780,575 @@ msgstr "Валюта Заказа" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "Контакт не соответствует выбранной компании" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "Описание заказа (дополнительно)" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "Выберите код проекта для этого заказа" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "Создал" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "Пользователь или группа, ответственная за этот заказ" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Ссылка на заказ" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "Компания, в которой детали заказываются" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "получил" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Дата создания" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Дата отгрузки" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "Отправлено" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Продукция уже произведена" + +#: order/models.py:1030 +msgid "Order is already cancelled" msgstr "" -#: order/models.py:1004 +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Количество" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "Записи о позиции" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "Описание позиции (необязательно)" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "Контекст" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "Дополнительный контекст для этой строки" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Цена за единицу" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "удалено" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Деталь поставщика" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Получено" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Цена продажи" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Цена последней продажи" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Доставлено" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Отгруженное кол-во" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Дата отправления" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Дата доставки" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Проверн" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Отправление" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Номер отправления" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Номер отслеживания" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Информация об отслеживании доставки" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Номер счета" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "Отправка не имеет зарезервированных складских позиций" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "Складская позиция не была назначена" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "Строка" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Элемент" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "Выберите складскую позицию для резервирования" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Укажите резервируемое количество" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "Выберите позицию, возвращаемую от клиента" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "Дата получения" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Результат" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "Позиции" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Валюта цены закупки" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Потерян" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Возвращено" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Выполняется" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Возврат" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Починить" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Заменить" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Возврат" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Отклонить" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Просроченные заказы на закупку" @@ -5553,7 +5415,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Завершить заказ" @@ -5563,13 +5425,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Ссылка на заказ" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Описание заказа" @@ -5578,19 +5440,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "Завершенные позиции" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Не завершен" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Создан" @@ -5600,15 +5462,15 @@ msgstr "Общая стоимость" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5524,11 @@ msgstr "Дублировать выбранное" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5570,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "Шаг %(step)s из %(count)s" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "Позиции" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Полученные Запасы" @@ -5729,7 +5582,7 @@ msgstr "Позиции заказа на закупку" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Добавить позицию" @@ -5778,30 +5631,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Общая Стоимость" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5672,30 @@ msgid "Ship Items" msgstr "Отправить" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5739,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "Код детали" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Наименование детали" @@ -5895,20 +5753,20 @@ msgstr "Наименование детали" msgid "Part Description" msgstr "Описание детали" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Ревизия" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Ключевые слова" @@ -5917,15 +5775,15 @@ msgstr "Ключевые слова" msgid "Part Image" msgstr "Изображение Детали" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "Код категории" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "Название категории" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5791,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Разновидность" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Минимальный запас" @@ -5950,160 +5808,164 @@ msgstr "Используется в" msgid "Building" msgstr "Производится" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "ID родителя" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "Имя родителя" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "Путь к категории" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Детали" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "Уровень BOM" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "ID Элемента BOM" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "Родительский IPN" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "IPN детали" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "Остатки произведенные заказом на производство" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "Остатки требуемые для заказов на производство" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "Корректный" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "Необходимо выбрать эту опцию" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Категория" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Место хранения по умолчанию" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Общий запас" @@ -6112,698 +5974,712 @@ msgstr "Общий запас" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Категория детали" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Категория детали" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Место хранения по умолчанию для деталей этой категории" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Структура" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Детали не могут быть непосредственно отнесены к структурной категории, но могут быть отнесены к дочерним категориям." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Ключевые слова по умолчанию" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "Ключевые слова по умолчанию для деталей этой категории" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Иконка" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Иконка (необязательно)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "Складская позиция с этим серийным номером уже существует" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном?" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "Описание детали (необязательно)" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "Категория" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Внутренний код детали" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Поставщик по умолчанию" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "Срок действия по умолчанию" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "Единицы измерения этой детали" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Эта деталь активна?" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "Контрольная сумма BOM" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "BOM проверил" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "Дата проверки BOM" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Создатель" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "Последняя инвентаризация" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "Количество Элементов" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Дата" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "Дополнительные Записи" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Отчет" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Количество Деталей" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "Шаблоны тестирования могут быть созданы только для отслеживаемых деталей" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Включено" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Требуется" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "Название параметра" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Чекбокс" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "Варианты" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "Родительская деталь" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Шаблон параметра" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "Данные" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Значение Параметра" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Значение по умолчанию" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "Код или наименование детали" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "Значение IPN" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "Уровень" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "Уровень BOM" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник. (она не отслеживается в заказах на производство)" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Перерасход" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Расчетное количество перерасходов производства (абсолютное или процентное)" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "Записи о позиции BOM" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Проверен" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Разрешить разновидности" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Складские позиции для разновидностей деталей могут быть использованы для этой позиции BOM" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "Часть 1" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "Часть 2" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "Выберите связанную часть" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6697,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" @@ -6837,299 +6713,299 @@ msgstr "Не выбрана ни одна деталь" msgid "Select category" msgstr "Выберите категорию" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Скопировать параметры" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "Код производителя" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "Исключить складские позиции в внешних местах хранения" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "Обновить детали" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "Подходящая деталь не найдена" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Некорректное количество" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "Общее количество" @@ -7281,7 +7157,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "Инвентаризация" @@ -7379,15 +7255,15 @@ msgstr "Поставщики" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "Связанная деталь" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "Добавить связанную деталь" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7322,7 @@ msgstr "Включить уведомления для данной детали #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Печать этикетки" @@ -7468,7 +7344,7 @@ msgstr "Установить запасы детали" msgid "Transfer part stock" msgstr "Переместить запасы детали" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "Действия с деталью" @@ -7517,7 +7393,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "Показать описание детали" @@ -7540,7 +7416,7 @@ msgid "Minimum stock level" msgstr "Минимальный складской запас" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7439,19 @@ msgstr "QR-код детали" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "Рассчитать" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "Скрыть описание детали" @@ -7634,8 +7510,8 @@ msgstr "Разновидности" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Склад" @@ -7681,7 +7557,7 @@ msgstr "Редактировать" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Последнее обновление" @@ -7753,7 +7629,7 @@ msgid "Update Pricing" msgstr "Обновить цены" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7709,7 @@ msgstr "Изображение детали не найдено" msgid "Part Pricing" msgstr "Цена Детали" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7775,8 @@ msgstr "Штрих-код не соответствует существующи msgid "Stock item does not match line item" msgstr "Складская позиция не соответствует позиции" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7870,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7897,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7951,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "Режим отладки" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7975,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8003,7 @@ msgstr "Граница" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "Альбомная" @@ -8143,11 +8019,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8116,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "Ключ" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "Ключ плагина" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "Имя Упаковки" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Установлено" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "Образец плагина" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Встроенный плагин" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Плагин" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "Метод" @@ -8302,17 +8179,17 @@ msgstr "Метод" msgid "No author found" msgstr "Автор не найден" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8272,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "Полная перезагрузка" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "Принудительная перезагрузка" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "Собрать плагины" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "Активировать плагин" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "Элементы" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "Отчет тестирования" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "Правовая информация" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "Письмо" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Название шаблона" -#: report/models.py:183 -msgid "Report template file" -msgstr "Файл шаблона отчёта" - -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:204 +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Шаблон имени файла" + +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Фильтры" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Ширина [мм]" + +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Высота [мм]" + +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" -msgstr "Включить результаты тестирования для складских позиций установленных в производимую деталь" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "Прогресс" -#: report/models.py:424 -msgid "Build Filters" -msgstr "Фильтры производства" - -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "Фильтры запросов производства (разделенные запятыми список ключей=значения пар ключей" - -#: report/models.py:464 -msgid "Part Filters" -msgstr "Фильтры деталей" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:648 +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 msgid "Snippet" msgstr "Сниппет" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "Объект" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" msgstr "" +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR Код" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR код" + #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Необходимые материалы" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "Требуется для" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Цена за Единицу" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "Дополнительные элементы" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "Всего" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Серийный номер" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "Отчет тестирования складской позиции" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "Результаты тестирования" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "Тестирование" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Результат" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "Прошел" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "Провален" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "Нет результата" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Установленные элементы" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Серийный номер" @@ -8724,7 +8685,7 @@ msgstr "Имя поставщика" msgid "Customer ID" msgstr "ID Клиента" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Установлено в" @@ -8749,555 +8710,723 @@ msgstr "Требуется рецензия" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "Истекает" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "Древо Деталей" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Залежалый" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "Необходимо указать количество" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Место хранения" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Места хранения" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Владелец" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Выберите владельца" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Складские позиции не могут находиться в структурных местах хранения, но могут находиться в дочерних местах хранения." -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Внешний" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Тип Места Хранения" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Вы не можете сделать это место хранение структурным, потому, что некоторые складские позиции уже находятся в нем!" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "Элемент должен иметь ссылку на производство, если is_building=True" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "Ссылка на производство не указывает на тот же элемент" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Складская позиция" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "Базовая деталь" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "Выберите соответствующего поставщика детали для этой складской позиции" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "Где находиться эта складская позиция?" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "Количество на складе" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "Исходное производство" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "Производства для этой складской позиции" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Поглощен" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "Заказ на производство, который поглотил эту складскую позицию" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Заказ на закупку для этой складской позиции" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Дата истечения срока годности для складской позиции. Остатки будут считаться просроченными после этой даты" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту складскую позицию при обнулении складского запаса" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "Складская позиция была назначена заказу на продажу" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "Складская позиция установлена в другую деталь" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "Складская позиция содержит другие детали" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "Складская позиция была назначена покупателю" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "Складская позиция в производстве" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "Результат тестирования" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "Записи Тестирования" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "Введите количество складских позиций для сериализации" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "Опциональное поле записей" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "Выберите складскую позицию для установки" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "Добавить запись к транзакции (необязательно)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "Складская позиция недоступна" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "Выберите деталь в которую будет преобразована складская позиция" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "Выберите складские позиции для изменения статуса" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "Записи о слияниях запасов" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить слияние складских позиций с различными поставщиками" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить слияние складских позиций с различными статусами" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "Статус складской позиции" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "Записи о перемещениях запасов" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "Да" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Требует внимания" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Поврежденный" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Разрушено" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Отклоненный" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Карантин" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Отслеживание устаревших запасов" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Складская позиция создана" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Отредактированная складская позиция" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Присвоенный серийный номер" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Новое значение запасов установлено" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Запасы, добавленные вручную" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Запасы удаленные вручную" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Место хранения изменено" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Запас обновлен" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Установленно в производимую деталь" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Удалено из производимой детали" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Установленный компонент" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Удаленный компонент" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Отделить от родительского элемента" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Разбить дочерний элемент" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Объединенные складские позиции" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Преобразовать в разновидность" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Создан выход продукции для этого заказа на производство" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Продукция заказа на производство завершена" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Продукция заказа на производство отклонена" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Поглощен заказом на производство" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Отгружено по заказу на продажу" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Получено по заказу на поставку" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Возвращено по заказу на возврат" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Отправлено клиенту" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Возвращено от клиента" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "История запасов" @@ -9319,7 +9448,7 @@ msgstr "Данные тестов" msgid "Test Report" msgstr "Отчет тестирования" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "Удалить данные тестирования" @@ -9339,11 +9468,11 @@ msgstr "Установленные складские позиции" msgid "Install Stock Item" msgstr "Установить складскую позицию" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "Удалить все результаты тестирования для этой складской позиции" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "Добавить Результат Тестирования" @@ -9366,17 +9495,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Установить запасы" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "Добавить Остатки" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "Удалить запасы" @@ -9385,12 +9514,12 @@ msgid "Serialize stock" msgstr "Сериализовать запасы" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Переместить запасы" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9560,7 @@ msgid "Delete stock item" msgstr "Удалить складскую позицию" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Производство" @@ -9497,7 +9626,7 @@ msgid "Available Quantity" msgstr "Доступный запас" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Место хранения не установлено" @@ -9528,40 +9657,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "QR-код складской позиции" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "Привязать штрих-код к складской позиции" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Предупреждение" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "Преобразовать складскую позицию" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "Вернуть на склад" @@ -9625,28 +9754,32 @@ msgstr "Ответственный за место хранения" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Создать новое место хранения" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Новое место хранения" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "места хранения" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10005,12 @@ msgstr "Настройки входа" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Регистрация" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10049,11 @@ msgstr "" msgid "Part Settings" msgstr "Настройки деталей" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "Импорт деталей" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "Импорт детали" @@ -9954,36 +10087,36 @@ msgstr "Настройки плагинов" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Плагины" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Установить плагины" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "Перезагрузить плагины" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "Стадия" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Сообщения" @@ -10141,7 +10274,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Удалить" @@ -10162,7 +10295,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "группа" @@ -10228,7 +10361,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10383,7 @@ msgid "Home Page" msgstr "Главная страница" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10418,7 @@ msgstr "Настройки заказов на продажу" msgid "Stock Settings" msgstr "Настройки склада" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10517,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Активные Сессии" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "IP Адрес" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Устройство" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Последняя активность" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s назад" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10740,26 @@ msgstr "Подтвердить" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Эта ссылка для подтверждения электронной почты устарела или является недействительной. Пожалуйста, отправьте новый запрос на подтверждение электронной почты." -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Вход" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "Не член?" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Зарегистрироваться" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Забыли пароль?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "или войти с помощью" @@ -10827,7 +10960,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Требуемое кол-во" @@ -10841,7 +10974,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "Минимальное количество" @@ -11006,7 +11139,7 @@ msgstr "" msgid "Unlink" msgstr "Отсоединить" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "Удалить складскую позицию" @@ -11196,7 +11329,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11349,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "Расходник" @@ -11271,7 +11404,7 @@ msgstr "Просмотр BOM" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "Необходимая деталь" @@ -11440,207 +11573,207 @@ msgstr "Удалить Продукцию" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "Зарезервированное количество" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "Завершенная продукция" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "Списанная продукция" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "Удаленная продукция" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "продукция" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "продукция" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "Действия с продукцией" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "Активная продукция не найдена" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "Зарезервированные Строки" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "Требуемые тесты" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "Выбрать детали" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "Выберите место хранения - источник (оставьте пустым, чтобы взять из всех мест)" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "Зарезервировать складские позиции для этого заказа на производства" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "Нет совпадающих складских позиций" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "Складские позиции будут автоматически зарезервированы на этот заказ на производстве, в соответствии с указанными рекомендациями" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "Зарезервировать Складские Позиции" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "Выбрать" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "Прогресс" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "Редактировать Резерв" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "строка производства" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "позиция производства" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "Отслеживаемая деталь" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "Количество единиц" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "Расходник" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "Отслеживаемый элемент" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "Запасы производства" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "Заказать запасы" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "Зарезервировать Остатки" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12019,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12056,7 @@ msgstr "Добавить новый фильтр" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "Создать фильтр" @@ -11956,32 +12089,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Форма содержит ошибки" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "Результаты не найдены" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "Поиск" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "Очистить ввод" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "Столбец Файла" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "Имя Поля" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "Выбрать столбцы" @@ -12005,51 +12138,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "Выбрать элементы" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "Метки не найдены" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "выбрано" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "Параметры печати" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "Печать Этикетки" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "Печать этикеток" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "Печать" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "Выбрать плагин" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12264,7 @@ msgid "Delete Line" msgstr "Удалить Строку" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12502,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12526,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "Детали не найдены" @@ -12445,101 +12542,101 @@ msgstr "" msgid "Set category" msgstr "Указать категорию" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "деталь" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "детали" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "Нет категории" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Отобразить списком" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "Отобразить сеткой" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "Отобразить древом" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "Категория с подпиской" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "результаты" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "Редактировать результаты тестирования" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "Приблизительный" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "Максимальное количество" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12762,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12775,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12832,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12886,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12906,66 @@ msgstr "Сканировать штрихкод входящего элемен msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "Заказ просрочен" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "Элементы" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "Редактировать Позицию" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "Удалить позицию" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "Редактировать Позицию" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "Удалить позицию" -#: templates/js/translated/report.js:63 -msgid "items selected" -msgstr "элементы выбраны" - -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "Отчёты не найдены" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12997,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "Некорректный клиент" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13059,156 @@ msgstr "" msgid "Skip" msgstr "Пропустить" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "Редактировать отправление" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "Удалить отправление" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "Редактировать отправление" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "Удалить Отправление" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "Не отправленно" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "Отслеживание" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "Счет" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "Создать Отправление" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "Зарезервировать складские позиции для заказа на продажу" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "Закупить запасы" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "Рассчитать стоимость" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13416,7 @@ msgstr "Взять" msgid "Add Stock" msgstr "Добавить Запасы" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Добавить" @@ -13327,180 +13424,180 @@ msgstr "Добавить" msgid "Delete Stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "Выбрать складские позиции" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "Выбрать как минимум одну складскую позицию" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "ПРОШЕЛ" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "ПРОВАЛЕН" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "НЕТ РЕЗУЛЬТАТА" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "Тест пройден" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "Добавить Результат Тестирования" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "Данные Тестирования" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "В производстве" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "Установленные складские позиции" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "Изменить статус запасов" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "Объединить Запасы" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "Удалить запасы" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "складские позиции" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "Действия с Запасами" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "Складская позиция в производстве" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "Складская позиция зарезервирована заказом на продажу" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "Складская позиция была назначена покупателю" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "Сериализированная складская позиция была зарезервирована " -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "Складские позиции были полностью зарезервированы" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "Складские позиции были частично зарезервированы" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "Складская позиция была установлена в другую деталь" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "Складская позиция была поглощена заказом на продажу" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "Складская позиция была просрочена" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "Складская позиция будет просрочена в скором времени" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "Складская позиция была отклонена" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "Складская позиция была утеряна" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "Складская позиция была уничтожена" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "Истощен" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "Кол-во Запаса" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "Нет складских позиций соответствующих запросу" @@ -13973,6 +14070,22 @@ msgstr "Сохранить" msgid "Show all notifications and history" msgstr "Показать все уведомления и историю" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR-данные не представлены" @@ -14194,35 +14307,34 @@ msgstr "" msgid "Revoked" msgstr "Отозван" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Права доступа" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Группа" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Вид" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Разрешение на просмотр элементов" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Разрешение на добавление элементов" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Изменить" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Разрешение на редактирование элементов" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Разрешение на удаление элементов" - diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 025a1c52be..3877177274 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -132,7 +132,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 4b6453542d..0c4680395b 100644 --- a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po @@ -2,26 +2,26 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n" +"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n" "X-Crowdin-Project: inventree\n" "X-Crowdin-Project-ID: 452300\n" "X-Crowdin-Language: sl\n" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API vmesnik ni najden" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Uporabnik nima dovoljenja pogleda tega modela" @@ -50,32 +50,32 @@ msgstr "Vnesena napačna količina ({exc})" #: InvenTree/exceptions.py:109 msgid "Error details can be found in the admin panel" -msgstr "Napaka, podrobnosti vidne v pogledu administratorja" +msgstr "Podrobnosti napake so vidne v pogledu administratorja" #: InvenTree/fields.py:139 msgid "Enter date" msgstr "Vnesi datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Zapiski" @@ -132,7 +132,7 @@ msgstr "Domena epošte ni podprta." msgid "Registration is disabled." msgstr "Registracija je onemogočena." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Podana napačna količina" @@ -324,21 +324,25 @@ msgid "Turkish" msgstr "Turščina" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamščina" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Kitajščina (poenostavljena)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Kitajščina (tradicionalno)" #: InvenTree/magic_login.py:28 #, python-brace-format msgid "[{site_name}] Log in to the app" -msgstr "" +msgstr "[{site_name}] Prijavite se v aplikacijo" #: InvenTree/magic_login.py:38 company/models.py:133 #: company/templates/company/company_base.html:138 @@ -349,147 +353,147 @@ msgstr "E-pošta" #: InvenTree/models.py:107 msgid "Error running plugin validation" -msgstr "" +msgstr "Napaka pri izvajanju preverjanja vtičnika" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" -msgstr "" +msgstr "Metapodatki morajo biti objekt tipa python dict" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" -msgstr "" +msgstr "Metapodatki vtičnika" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "Polje metapodatkov JSON za uporabo pri zunanjih vtičnikih" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Nepravilno nastavljen vzorec" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Nastavljen neprepoznan ključ formata" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Manjka obvezen ključ formata" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Referenčno polje ne sme biti prazno" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referenca se mora ujemati s vzorcem" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referenčna številka prevelika" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Manjka datoteka" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Manjka zunanja povezava" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Priloga" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Izberite prilogo" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Povezava" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Zunanja povezava" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Komentar" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Komentar datoteke" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Uporabnik" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "naloži datum" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Ime ne sme biti prazno" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Neveljavna mapa prilog" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Ime datoteke vsebuje neveljavni znak '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Datoteki manjka končnica" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Priloga s tem imenom že obstaja" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Napaka pri preimenovanju datoteke" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" -msgstr "" +msgstr "Podvojena imena ne morejo obstajati pod istim nadrejenim elementom" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,126 +503,126 @@ msgstr "Nedovoljena izbira" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "nadrejen" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Pot" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" -msgstr "" +msgstr "Markdown opombe (neobvezno)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Podatki čtrne kode" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Podatki črtne kode tretje osebe" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Oznaka črtne kode" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Enolična oznaka podatkov črtne kode" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Črtna koda že obstaja" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Napaka strežnika" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" -msgstr "" +msgstr "Valuta" #: InvenTree/serializers.py:102 msgid "Select currency from available options" -msgstr "" +msgstr "Izberite valuto med razpoložljivimi možnostmi" #: InvenTree/serializers.py:441 msgid "You do not have permission to change this user role." -msgstr "" +msgstr "Nimate dovoljenja za spreminjanje vloge tega uporabnika." #: InvenTree/serializers.py:453 msgid "Only superusers can create new users" -msgstr "" +msgstr "Samo superuporabniki lahko ustvarijo nove uporabnike" #: InvenTree/serializers.py:472 msgid "Your account has been created." -msgstr "" +msgstr "Vaš račun je bil ustvarjen." #: InvenTree/serializers.py:474 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" #: InvenTree/serializers.py:481 msgid "Welcome to InvenTree" -msgstr "" +msgstr "Dobrodošli v InvenTree" #: InvenTree/serializers.py:542 msgid "Filename" @@ -672,7 +676,7 @@ msgstr "Dvojni stolpec: '{col}'" #: InvenTree/serializers.py:859 msgid "Remote Image" -msgstr "" +msgstr "Oddaljena slika" #: InvenTree/serializers.py:860 msgid "URL of remote image file" @@ -682,7 +686,7 @@ msgstr "Povezava do oddaljene slike" msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Nadzor dela v ozadju neuspel" @@ -694,202 +698,6 @@ msgstr "Zaledje e-pošte ni nastavljeno" msgid "InvenTree system health checks failed" msgstr "Preverjanje zdravja sistema InvenTree neuspelo" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "V teku" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Postavljeno" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Končano" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Preklicano" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Izgubljeno" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Vrnjeno" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Poslano" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Potrebna pozornost" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Poškodovano" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Uničeno" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Zavrnjeno" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Dano v karanteno" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Vnos zaloge postavke" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Postavka zaloge ustvarjena" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Urejena postavka zaloge" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Dodeljena serijska številka" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Zaloga prešteta" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Zaloga ročno dodana" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Zaloga ročno odstranjena" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Lokacija spremenjena" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Vstavljeno v sestavo" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Odstranjeno iz sestave" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Vstavljena postavka komponente" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Odstranjena postavka komponente" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Razdeljena od nadrejene postavke" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Razdeljena podrejena postavka" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Združena zaloga postavk" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Spremenjeno v varianto" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Nalog za izgradnjo ustvarjen" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Nalog za izgradnjo končan" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Porabljeno v nalogu za izgradnjo" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Posalno stranki" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Vrnjeno od stranke" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Proizvodnja" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "Sistemske informacije" msgid "About InvenTree" msgstr "O InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Nalog izgradnje" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Nalog izgradnje" msgid "Build Orders" msgstr "Nalogi izgradnje" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Neveljavna izbira za nadrejeno izgradnjo" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referenca" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Izberite del za izgradnjo" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Referenca dobavnica" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Dobavnica na katero se navezuje ta izgradnja" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Lokacija vira" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Ciljna lokacija" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Količina izgradenj" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Število postavk za izgradnjo" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Končane postavke" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Število postavk zaloge, ki so bile končane" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Datum ustvarjenja" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Rok dokončanja" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Datom končanja" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "dokončal" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Izdal" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Odgovoren" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Količina" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "V teku" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Proizvodnja" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Preklicano" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Končano" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "A build order has been completed" +msgid "Mark Shipped Orders as Complete" +msgstr "Nalog izgradnej dokončan" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3827,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4170,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Postavljeno" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,575 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Igradnja je že dokončana" + +#: order/models.py:1030 +msgid "Order is already cancelled" msgstr "" -#: order/models.py:1004 +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Poslano" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Izgubljeno" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Vrnjeno" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "V teku" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5415,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5425,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5440,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5462,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5524,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5570,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5582,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5631,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5672,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5739,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5753,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5775,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5791,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5808,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5974,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6697,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6713,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7157,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7255,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7322,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7344,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7393,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7416,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7439,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7510,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7557,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7629,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7709,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7775,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7870,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7897,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7951,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7975,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8003,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8019,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8116,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8179,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8272,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8685,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8710,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "OK" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Potrebna pozornost" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Poškodovano" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Uničeno" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Zavrnjeno" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Dano v karanteno" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Vnos zaloge postavke" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Postavka zaloge ustvarjena" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Urejena postavka zaloge" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Dodeljena serijska številka" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Zaloga prešteta" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Zaloga ročno dodana" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Zaloga ročno odstranjena" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Lokacija spremenjena" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Zaloga posodobljena" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Vstavljeno v sestavo" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Odstranjeno iz sestave" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Vstavljena postavka komponente" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Odstranjena postavka komponente" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Razdeljena od nadrejene postavke" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Razdeljena podrejena postavka" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Združena zaloga postavk" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Spremenjeno v varianto" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Nalog za izgradnjo ustvarjen" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Nalog za izgradnjo končan" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Nalog za izgradnjo zavrnjen" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Porabljeno v nalogu za izgradnjo" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Poslano preko prodajnega naročila" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Prejeto preko nabavnega naročila" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Vrnjeno preko naročila za vračilo" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Posalno stranki" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Vrnjeno od stranke" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9448,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9468,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9495,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9514,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9560,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Izdelava" @@ -9497,7 +9626,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9657,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9754,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10005,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10049,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10087,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10274,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10295,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10361,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10383,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10418,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10517,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10740,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10960,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10974,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11139,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11329,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11349,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11404,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11573,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11707,7 +11840,7 @@ msgstr "" #: templates/js/translated/company.js:678 #: templates/js/translated/company.js:742 msgid "Role" -msgstr "" +msgstr "Vloga" #: templates/js/translated/company.js:686 msgid "Delete Contacts" @@ -11886,12 +12019,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12056,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12089,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12138,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12264,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12502,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12526,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12542,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12762,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12775,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12832,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12886,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12906,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12997,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13059,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13416,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13424,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14070,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14307,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index a7b07cb81c..2e4c8f2035 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:20\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API krajnja tačka nije pronađena" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Korisnik nema dozvolu za pregled ovog modela" @@ -56,26 +56,26 @@ msgstr "Detalji o grešci se mogu naći u admin sekciji" msgid "Enter date" msgstr "Unesite datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Napomene" @@ -132,7 +132,7 @@ msgstr "Navedeni domen adrese e-pošte nije prihvaćen." msgid "Registration is disabled." msgstr "Registracija je onemogućena." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turski" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vijetnamski" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Kineski (Uprošćeni)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Kineski (Tradicionalni)" @@ -351,145 +355,145 @@ msgstr "E-Pošta" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metapodaci moraju biti \"python dict\" objekat" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Metapodaci dodatka" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Polje metapodataka JSON, za korištenje eksternih dodataka" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Neispravno formatiran obrazac" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Naveden je ključ nepoznatog formata" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Nedostaje potreban ključ formata" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Polje za reference ne može biti prazno" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referenca mora odgovarati traženom obrascu" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Broj reference je predugačak" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Nedostaje datoteka" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Nedostaje eksterni link" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Prilog" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Izaberite datoteku za prilog" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Link za eksterni URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Komentar" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Datoteka komentara" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Korisnik" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "dadajte datoteku" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Ime datoteke ne sme biti prazno" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Direktorijum nevažećih datoteka" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Ime datoteke sadrži neprihvatljivi karakter '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Imenu datoteke nedostaje ekstenzija" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Prilog s ovim nazivom datoteke već postoji" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Greška pri preimenovanju datoteke" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Dvostruka imena ne mogu postojati pod istom nadredjenom grupom" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Nevažeći izvor" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Nevažeći izvor" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "nadređeni" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Putanja" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Zabeleške (Opciono)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Podaci sa barkoda" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Podaci sa barkoda trećih lica" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Heš barkoda" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Jedinstveni hash barkoda" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Postojeći barkod pronađen" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Greška servera" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Server je zabležio grešku." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Mora biti važeći broj" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL udaljene slike" msgid "Downloading images from remote URL is not enabled" msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Provera pozadinskog radnika nije uspjela" @@ -694,202 +698,6 @@ msgstr "Pozadina e-pošte nije konfigurirana" msgid "InvenTree system health checks failed" msgstr "Provere integriteta sistema InvenTree nije uspela" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Na čekanju" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Postavljen" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Gotovo" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Otkazano" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Izgubljeno" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Vraćeno" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "U progresu" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Poslato" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "Uredu" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Potrebna pažnja" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Oštećeno" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Uništeno" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Odbijeno" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "U karantinu" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Nasleđeni unos za praćenje zaliha" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Stavka na zalihi stvorena" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Izmenjena stavka u zalihama" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Dodeljen serijski broj" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Zalihe prebrojane" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Zalihe dodane ručno" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Zaliha ručno uklonjena" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Lokacija promenjena" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Zaliha obnovljena" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Instalisan u sklopu" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Skinuto sa sklopa" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Instalirana stavka komponente" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Uklonjena stavka komponente" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Odvoj od nadređene stavke" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Podeli podređenu stavku" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Spojene stavke zaliha" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Pretvoreno u varijaciju" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Nalog za izradu" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Nalog za izradu" msgid "Build Orders" msgstr "Nalozi za izradu" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Nevažeći izbor za nadređenu verziju" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "Deo u nalogu za izradu ne može se izmeniti" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referenca" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Kratak opis izrade (nije obavezno)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Na čekanju" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Otkazano" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Gotovo" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Postavljen" -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Poslato" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Izgubljeno" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Vraćeno" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "U progresu" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "Uredu" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Potrebna pažnja" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Oštećeno" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Uništeno" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Odbijeno" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "U karantinu" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Nasleđeni unos za praćenje zaliha" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Stavka na zalihi stvorena" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Izmenjena stavka u zalihama" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Dodeljen serijski broj" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Zalihe prebrojane" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Zalihe dodane ručno" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Zaliha ručno uklonjena" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Lokacija promenjena" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Zaliha obnovljena" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Instalisan u sklopu" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Skinuto sa sklopa" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Instalirana stavka komponente" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Uklonjena stavka komponente" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Odvoj od nadređene stavke" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Podeli podređenu stavku" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Spojene stavke zaliha" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Pretvoreno u varijaciju" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index 38d3a3518b..007bbf6fa5 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Användaren har inte behörighet att se denna modell" @@ -56,26 +56,26 @@ msgstr "Information om felet finns under Error i adminpanelen" msgid "Enter date" msgstr "Ange datum" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Anteckningar" @@ -132,7 +132,7 @@ msgstr "Den angivna e-postdomänen är inte godkänd." msgid "Registration is disabled." msgstr "Registrering är stängd." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Turkiska" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "Ukrainska" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamesiska" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Kinesiska (Förenklad)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Kinesiska (Traditionell)" @@ -351,145 +355,145 @@ msgstr "E-postadress" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Felaktigt formaterat mönster" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Okänd formatnyckel angiven" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Obligatorisk formatnyckel saknas" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Textfältet kan inte lämnas tomt" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referensen måste matcha obligatoriskt mönster" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referensnumret är för stort" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Saknad fil" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Extern länk saknas" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Bilaga" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Välj fil att bifoga" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Länk" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Länk till extern URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Kommentar" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Fil kommentar" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Användare" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "uppladdningsdatum" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Filnamnet får inte vara tomt" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Ogiltig katalog för bilaga" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Filnamnet innehåller ogiltiga tecken '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Filnamn saknar ändelse" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Det finns redan en bilaga med detta filnamn" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Fel vid namnbyte av fil" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Ogiltigt val" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Beskrivning" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "överordnad" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Sökväg" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Streckkodsdata" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Befintlig streckkod hittades" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Serverfel" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL för fjärrbildsfil" msgid "Downloading images from remote URL is not enabled" msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Kontroll av bakgrundsarbetare misslyckades" @@ -694,202 +698,6 @@ msgstr "Backend för e-post är inte konfigurerad" msgid "InvenTree system health checks failed" msgstr "InvenTree systemhälsokontroll misslyckades" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Väntar" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Placerad" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Slutför" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Avbruten" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Förlorad" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Återlämnad" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Pågående" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Skickad" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "OK" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "OBS!" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Skadad" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Förstörd" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Avvisad" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "I karantän" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Spårningspost för äldre lager" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Lagerpost skapad" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Redigerade lagerpost" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Tilldelade serienummer" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Lagersaldo beräknat" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Lagerpost manuellt tillagd" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Lagerpost manuellt borttagen" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Platsen har ändrats" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Installerad i montering" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Borttagen från montering" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Installerat komponentobjekt" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Tog bort komponentobjekt" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Dela från överordnat objekt" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Dela underordnat objekt" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Sammanfogade lagerposter" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Konverterad till variant" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Bygg orderutgång skapad" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Bygg orderutgång slutförd" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Konsumeras av byggorder" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Skickat till kund" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Returnerad från kund" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Produktion" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Reparera" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Ersätt" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Återbetala" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Avvisa" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Okänd databas" @@ -938,45 +746,45 @@ msgstr "Systeminformation" msgid "About InvenTree" msgstr "Om InvenTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "Byggnationen måste avbrytas innan den kan tas bort" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Byggorder" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Byggorder" msgid "Build Orders" msgstr "Byggordrar" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Ogiltigt val för överordnad bygge" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Byggorderreferens" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referens" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Överordnat Bygge" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Byggorder till vilken detta bygge är tilldelad" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Del" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Välj del att bygga" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Försäljningsorderreferens" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Försäljningsorder till vilken detta bygge allokeras" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Källa Plats" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Destinationsplats" -#: build/models.py:240 +#: build/models.py:270 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:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Bygg kvantitet" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Antal lagerobjekt att bygga" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Slutförda objekt" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Antal lagerposter som har slutförts" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Byggstatus" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Bygg statuskod" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Skapad" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Datum för slutförande" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Byggandet kommer att förfallas efter detta datum." -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Slutförandedatum" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "slutfört av" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Utfärdad av" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Användare som utfärdade denna byggorder" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Ansvarig" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Extern länk" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Projektkod" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Byggorder {build} har slutförts" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "En byggorder har slutförts" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Antal" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Installera till" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Plats" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Status" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Väntar" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Produktion" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Avbruten" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Slutför" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Måldatum" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Försäljningsorder" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Utfärdad av" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Mål" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Skapad" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Slutförd" @@ -2043,11 +1894,11 @@ msgstr "Bilagor" msgid "Build Notes" msgstr "Bygganteckningar" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "Projektbeskrivning" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Ingen grupp" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" +msgstr "Ogiltigt domännamn: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Omstart krävs" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Serverinstans (Namn)" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Företagsnamn" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Internt företagsnamn" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Bas-URL" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "Bas-URL för serverinstans" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Standardvaluta" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "dagar" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Ladda ner från URL" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "Tillåt nedladdning av bilder och filer från extern URL" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Kräv bekräftelse" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Kräv uttrycklig användarbekräftelse för vissa åtgärder." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Mall" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Virtuell" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Visa import i vyer" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Visa importguiden i vissa delvyer" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Interna priser" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Debugläge" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Sidstorlek" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Aktivera testrapporter" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "A build order has been completed" +msgid "Mark Shipped Orders as Complete" +msgstr "En byggorder har slutförts" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" -msgstr "" +msgstr "Aktivera registrering" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Tillåtna domäner" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "Aktivera projektkoder" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" -msgstr "" +msgstr "Visa nyheter" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Sök efter artiklar" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "Sök efter leverantörsartikel" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Sök efter tillverkarartikel" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Datumformat" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Bild" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Kontakt" @@ -3949,7 +3827,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Företag" @@ -3968,7 +3846,7 @@ msgstr "" #: company/models.py:395 msgid "Primary address" -msgstr "" +msgstr "Primär adress" #: company/models.py:396 msgid "Set as primary address" @@ -3981,7 +3859,7 @@ msgstr "" #: company/models.py:402 msgid "Address line 1" -msgstr "" +msgstr "Adressrad 1" #: company/models.py:408 templates/js/translated/company.js:915 #: templates/js/translated/company.js:977 @@ -3990,7 +3868,7 @@ msgstr "" #: company/models.py:409 msgid "Address line 2" -msgstr "" +msgstr "Adressrad 2" #: company/models.py:415 company/models.py:416 #: templates/js/translated/company.js:983 @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4061,20 +3939,20 @@ msgstr "" #: templates/js/translated/company.js:1611 #: templates/js/translated/table_filters.js:800 msgid "Manufacturer" -msgstr "" +msgstr "Tillverkare" #: company/models.py:501 msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Leverantör" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "I lager" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4170,11 @@ msgstr "Radera företag" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "" msgid "Delete image" msgstr "Radera bild" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Kund" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adress" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Telefon" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "Adresser" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4721,128 +4598,54 @@ msgstr "Företag" #: company/views.py:52 msgid "New Company" -msgstr "" +msgstr "Nytt företag" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Placerad" -#: label/models.py:120 -msgid "Label name" -msgstr "Etikettnamn" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "Etikett" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "QR-kod" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "QR-kod" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Orderstatus" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,575 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Byggutgång är redan slutförd" + +#: order/models.py:1030 +msgid "Order is already cancelled" msgstr "" -#: order/models.py:1004 +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Skickad" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Leveransdatum" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Förlorad" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Återlämnad" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Pågående" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Reparera" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Ersätt" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Återbetala" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Avvisa" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5415,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5425,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5440,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5462,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5524,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5570,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "Steg %(step)s av %(count)s" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5582,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5631,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5672,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5739,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5753,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Nyckelord" @@ -5917,15 +5775,15 @@ msgstr "Nyckelord" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "Kategorinamn" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5791,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5808,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Artiklar" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Kategori" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5974,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Ikon" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Ikon (valfritt)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Standardleverantör" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" -msgstr "" +msgstr "Datum" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6697,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6713,299 @@ msgstr "" msgid "Select category" msgstr "Välj kategori" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" -msgstr "" +msgstr "Kopiera bild" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Generera rapport" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7157,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7255,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7322,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7344,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7393,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7416,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7439,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7510,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7557,7 @@ msgstr "Redigera" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Senast uppdaterad" @@ -7753,7 +7629,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7709,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7775,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7870,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7897,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7951,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7975,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8003,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8019,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8116,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8179,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8272,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "A4" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "A3" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" msgstr "" +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "QR-kod" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "QR-kod" + #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Serienummer" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8685,7 @@ msgstr "Leverantörsnamn" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8710,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "OK" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "OBS!" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Skadad" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Förstörd" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Avvisad" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "I karantän" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Spårningspost för äldre lager" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Lagerpost skapad" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Redigerade lagerpost" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Tilldelade serienummer" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Lagersaldo beräknat" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Lagerpost manuellt tillagd" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Lagerpost manuellt borttagen" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Platsen har ändrats" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Installerad i montering" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Borttagen från montering" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Installerat komponentobjekt" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Tog bort komponentobjekt" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Dela från överordnat objekt" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Dela underordnat objekt" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Sammanfogade lagerposter" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Konverterad till variant" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Bygg orderutgång skapad" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Bygg orderutgång slutförd" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Konsumeras av byggorder" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Skickat till kund" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Returnerad från kund" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9448,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9468,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9495,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9514,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9560,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Bygg" @@ -9497,7 +9626,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9657,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "Redigera lagerstatus" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Varning" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9754,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9857,7 +9990,7 @@ msgstr "" #: templates/InvenTree/settings/global.html:8 msgid "Server Settings" -msgstr "" +msgstr "Serverinställningar" #: templates/InvenTree/settings/label.html:8 #: templates/InvenTree/settings/user_labels.html:9 @@ -9872,12 +10005,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10049,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,39 +10087,39 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" -msgstr "" +msgstr "Meddelande" #: templates/InvenTree/settings/plugin_settings.html:16 msgid "Plugin information" @@ -10141,7 +10274,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Radera" @@ -10162,7 +10295,7 @@ msgid "No project codes found" msgstr "Inga projektkoder hittades" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10361,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10383,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10267,7 +10400,7 @@ msgstr "" #: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 msgid "Server" -msgstr "" +msgstr "Server" #: templates/InvenTree/settings/sidebar.html:41 msgid "Labels" @@ -10285,7 +10418,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10517,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Aktiva sessioner" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "Logga ut aktiva sessioner" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "IP-adress" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Enhet" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Senaste aktivitet" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s sedan" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10740,26 @@ msgstr "Bekräfta" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Logga in" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Registrera dig" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Glömt lösenord?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "eller logga in med" @@ -10827,7 +10960,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10974,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11139,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11329,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11349,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11404,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11573,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12019,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12056,7 @@ msgstr "Lägg till nytt filter" msgid "Clear all filters" msgstr "Rensa alla filter" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "Skapa filter" @@ -11956,32 +12089,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "Inga resultat hittades" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "Söker" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12138,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "Inga etiketter hittades" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "Skriv ut etikett" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "Skriv ut etiketter" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "Skriv ut" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12264,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12502,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12526,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12542,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "Ingen kategori" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "Visa som lista" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "Inga underkategorier hittades" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "Ladda underkategorier" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "resultat" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12762,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12775,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12832,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12886,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12906,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "Inga rapporter hittades" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12997,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "Ogiltig kund" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13059,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "Faktura" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13245,7 +13342,7 @@ msgstr "" #: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 msgid "Enter serial number" -msgstr "" +msgstr "Ange serienummer" #: templates/js/translated/stock.js:614 msgid "Enter a serial number" @@ -13319,7 +13416,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Lägg till" @@ -13327,180 +13424,180 @@ msgstr "Lägg till" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14070,22 @@ msgstr "Spara" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14307,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 8105dcce9b..7683e9c703 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:20\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "ไม่พบ API endpoint" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "ป้อนวันที่" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "หมายเหตุ" @@ -132,7 +132,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "ภาษาเวียดนาม" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "อีเมล" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "ข้อมูลเมตาของปลั๊กอิน" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "ไม่พบไฟล์" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "ไฟล์แนบ" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "เลือกไฟล์ที่ต้องการแนบ" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "ลิงก์" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "ความคิดเห็น" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "ความเห็นของไฟล์" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "ผู้ใช้งาน" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "วันที่อัปโหลด" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "จำเป็นต้องใส่ชื่อไฟล์" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "ชื่อไฟล์ห้ามมีตัวอักษรต้องห้าม '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "ไม่พบนามสกุลของไฟล์" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "คำอธิบาย" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "ข้อมูลบาร์โค้ด" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "บาร์โค้ดนี้มีในระบบแล้ว" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "อยู่ระหว่างดำเนินการ" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "สำเร็จแล้ว" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "ยกเลิกแล้ว" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "สูญหาย" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "ส่งคืนแล้ว" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "จัดส่งแล้ว" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "ตกลง" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "ได้รับความเสียหาย" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "ทำลายแล้ว" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "ถูกปฏิเสธ" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "กำหนดหมายเลขซีเรียลแล้ว" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "นับสต็อกแล้ว" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "เพิ่มสต็อกแล้ว" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "ลบสต็อกแล้ว" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "เปลี่ยนสถานที่แล้ว" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "อัพเดทสต็อกแล้ว" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "จัดส่งให้ลูกค้าแล้ว" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "ข้อมูลระบบ" msgid "About InvenTree" msgstr "เกี่ยวกับ Inventree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "ออกโดย" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "สถานที่" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "สถานะ" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "อยู่ระหว่างดำเนินการ" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "ยกเลิกแล้ว" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "สำเร็จแล้ว" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "สำเร็จแล้ว" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "จัดส่งแล้ว" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "สูญหาย" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "ส่งคืนแล้ว" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "ชิ้นส่วน" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "ตกลง" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "ได้รับความเสียหาย" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "ทำลายแล้ว" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "ถูกปฏิเสธ" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "กำหนดหมายเลขซีเรียลแล้ว" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "นับสต็อกแล้ว" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "เพิ่มสต็อกแล้ว" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "ลบสต็อกแล้ว" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "เปลี่ยนสถานที่แล้ว" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "อัพเดทสต็อกแล้ว" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "จัดส่งให้ลูกค้าแล้ว" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index 256e4a1fe9..89045abeac 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Kullanıcının bu modeli görüntüleme izni yok" @@ -56,26 +56,26 @@ msgstr "Hata detaylarını admin panelinde bulabilirsiniz" msgid "Enter date" msgstr "Tarih giriniz" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Notlar" @@ -132,7 +132,7 @@ msgstr "Sağlanan e-posta alanı onaylanmadı." msgid "Registration is disabled." msgstr "Kayıt devre dışı." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Türkçe" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Vietnamca" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Çince (Basitleştirilmiş)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" @@ -351,145 +355,145 @@ msgstr "E-posta" msgid "Error running plugin validation" msgstr "Eklenti doğrulama sırasında hata oluştu" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Metadata, bir python dict nesnesi olmalıdır" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Plugin Metaverileri" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Harici eklentiler tarafından kullanım için JSON metadata alanı" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Yanlış biçimlendirilmiş desen" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Belirtilen bilinmeyen format anahtarı" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Gerekli format anahtarı eksik" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Referans alanı boş olamaz" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Referans sayısı çok fazla" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Eksik dosya" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Ek" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Bağlantı" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Yorum" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Dosya yorumu" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Kullanıcı" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "yükleme tarihi" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Dosya adı boş olamaz" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Ek dosya yolu geçersiz" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Dosya adı geçersiz karakterler içeriyor'{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Dosya uzantısı yok" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Aynı isimli başka bir dosya zaten var" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Dosya adı değiştirilirken hata" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Geçersiz seçim" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Açıklama" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "üst" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Yol" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Markdown notları (isteğe bağlı)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Barkod Verisi" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Üçüncü parti barkod verisi" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Barkod Hash" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "Barkod verisinin benzersiz hash'i" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Var olan barkod bulundu" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Sunucu Hatası" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Bir hafta sunucu tarafından kayıt edildi." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "Uzaktan görüntü dosya URL'si" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Arka plan çalışanı kontrolü başarısız oldu" @@ -694,202 +698,6 @@ msgstr "E-posta arka ucu yapılandırılmadı" msgid "InvenTree system health checks failed" msgstr "InvenTree sistem sağlık kontrolü başarısız" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Bekliyor" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Sipariş verildi" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Tamamlandı" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "İptal edildi" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Kayıp" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "İade" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Devam Ediyor" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Sevk edildi" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "TAMAM" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Dikkat gerekli" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Hasarlı" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Kullanılamaz durumda" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Reddedildi" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Karantinaya alındı" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Eski stok izleme girişi" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Stok kalemi oluşturuldu" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Düzenlenen stok kalemi" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Atanan seri numarası" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Stok sayıldı" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Stok manuel olarak eklendi" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Stok manuel olarak çıkarıldı" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Konum değişti" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Stok Güncellendi" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Montajda kullanıldı" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Montajdan çıkarıldı" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Bileşen ögesinde kullanıldı" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Bileşen ögesinden çıkarıldı" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Üst ögeden ayır" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Alt ögeyi ayır" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Stok parçalarını birleştir" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Yapım emri çıktısı oluşturuldu" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Yapım emri çıktısı tamamlandı" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Müşteriye gönderildi" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Müşteriden geri döndü" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Üretim" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Geri Dön" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "Sistem Bilgisi" msgid "About InvenTree" msgstr "InvenTree Hakkında" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "Mevcut" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Yapım İşi Emri" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Yapım İşi Emri" msgid "Build Orders" msgstr "Yapım İşi Emirleri" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Yapım İşi Emri Referansı" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Referans" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği yapım işi emri" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Parça" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Yapım işi için parça seçin" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Bu yapım işinin tahsis edildiği satış emri" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Bu yapım işi için stok alınacak konumu seçin (her hangi bir stok konumundan alınması için boş bırakın)" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Yapım İşi Miktarı" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Yapım işi stok kalemlerinin sayısı" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "Yapım İşi Durumu" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Yapım işi durum kodu" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Yapım işi çıktısı için sıra numarası" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Yapım işinin tamamlanması için hedef tarih. Bu tarihten sonra yapım işi gecikmiş olacak." -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Veren" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "Bu yapım işi emrini veren kullanıcı" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Yapım işi çıktısı belirtilmedi" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Yapım işi çıktısı zaten tamamlanmış" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Miktar" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Ana parça izlenebilir olarak işaretlendiğinden, yapım işi çıktısı için bir yapım işi ögesi belirtmelidir" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "Yapım işi için tahsis edilen stok miktarı" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Kurulduğu yer" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Yapım işi çıktısı için miktarını girin" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "Yapım işi çıktısı için seri numaraları girin" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Konum" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Durum" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "Gerekli yapım işi miktarı tamamlanmadı" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Bekliyor" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Üretim" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "İptal edildi" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Tamamlandı" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Stok, yapım işi emri için tamamen tahsis edilemedi" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Hedeflenen tarih" @@ -1846,7 +1697,7 @@ msgstr "Bu yapım işinin %(target)s tarihinde süresi doluyor" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Sipariş Emri" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Veren" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "Stok Kaynağı" msgid "Stock can be taken from any available location." msgstr "Stok herhangi bir konumdan alınabilir." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Hedef" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "Toplu" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Oluşturuldu" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Hedef tarih ayarlanmadı" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Tamamlandı" @@ -2043,11 +1894,11 @@ msgstr "Ekler" msgid "Build Notes" msgstr "Yapım İşi Notları" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Şirket adı" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "Ana URL" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "günler" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "URL'den indir" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "Harici URL'den resim ve dosyaların indirilmesine izin ver" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "DPN Regex" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Şablon" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Montaj" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Bileşen" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Satılabilir" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Takip Edilebilir" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Sanal" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark Shipped Orders as Complete" +msgstr "Siparişi tamamlandı olarak işaretle" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Formlarda Miktarı Göster" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Fiyat" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "" msgid "Active" msgstr "Aktif" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Resim" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3614,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3630,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "İletişim e-posta adresi" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "İletişim" @@ -3949,7 +3827,7 @@ msgstr "Bu şirket için varsayılan para birimi" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3919,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Temel Parça" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Parça seçin" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Üretici seçin" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "ÜPN" @@ -4086,61 +3964,60 @@ msgstr "Üretici Parça Numarası" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Parametre adı" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Değer" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Parametre değeri" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Tedarikçi" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Not" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Paketleme" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "çoklu" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4134,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Pasif" @@ -4293,11 +4170,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4193,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Müşteri" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Adres" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4407,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Tedarikçi Parçası" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "Tedarikçi Parça Stoku" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Şirketler" msgid "New Company" msgstr "Yeni Şirket" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Sipariş verildi" -#: label/models.py:120 -msgid "Label name" -msgstr "Etiket adı" - -#: label/models.py:128 -msgid "Label description" -msgstr "Etiket tanımı" - -#: label/models.py:136 -msgid "Label" -msgstr "Etiket" - -#: label/models.py:137 -msgid "Label template file" -msgstr "Etiket şablon listesi" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Etkin" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Etiket sablonu etkinleştirildi" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Genişlik [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Etiket genişliği mm olarak belirtilmeli" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Yükseklik [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Etiket yüksekliği mm olarak belirtilmeli" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Dosya Adı Deseni" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "Etiket dosya adları oluşturma için desen" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Filtreler" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4780,575 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "Oluşturan" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Yapım işi çıktısı zaten tamamlanmış" + +#: order/models.py:1030 +msgid "Order is already cancelled" msgstr "" -#: order/models.py:1004 +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Sevk edildi" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar bir olmalı" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Kayıp" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "İade" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Devam Ediyor" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Geri Dön" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5415,7 @@ msgstr "Siparişi tamamlandı olarak işaretle" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5425,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5440,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5462,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5524,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5570,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5582,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5631,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Toplam Maliyet" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5672,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5739,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5753,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "DPN" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Revizyon" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Anahtar kelimeler" @@ -5917,15 +5775,15 @@ msgstr "Anahtar kelimeler" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5791,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Çeşidi" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Minimum Stok" @@ -5950,160 +5808,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Parçalar" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Varsayılan Konum" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5974,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "Bu kategori içindeki parçalar için varsayılan konum" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Parça adı" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın çeşidi mi?" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Varsayılan Tedarikçi" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "Varsayılan tedarikçi parçası" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan yapılabilir mi?" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "Bu parça diğer parçaların yapımında kullanılabilir mi?" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "Test şablonları sadece takip edilebilir paçalar için oluşturulabilir" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Etkin" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Gerekli" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Çeşide İzin Ver" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Çeşit parçaların stok kalemleri bu malzeme listesinde kullanılabilir" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6697,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6713,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7157,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7255,15 @@ msgstr "Parça Tedarikçileri" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7322,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "Etiket Yazdır" @@ -7468,7 +7344,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "Parça işlemleri" @@ -7517,7 +7393,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7416,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7439,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7510,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Stok" @@ -7681,7 +7557,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7629,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7709,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7775,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7870,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7897,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7951,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7975,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8003,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8019,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8116,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8179,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8272,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Şablon için geçerli bir nesne sağlanmadı" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Şablon adı" -#: report/models.py:183 -msgid "Report template file" -msgstr "Rapor şablon dosyası" +#: report/models.py:156 +msgid "Template description" +msgstr "" -#: report/models.py:190 -msgid "Report template description" -msgstr "Rapor şablon tanımı" +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "Revizyon numarası raporla (otomatik artış)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Dosya Adı Deseni" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Filtreler" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Genişlik [mm]" + +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Etiket genişliği mm olarak belirtilmeli" + +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Yükseklik [mm]" + +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Etiket yüksekliği mm olarak belirtilmeli" + +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "Rapor şablonu etkin" - -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "Stok kalemi sorgu filtreleri (anahter=değer [key=value] olarak virgülle ayrılmış liste)" - -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" -msgstr "" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" -msgstr "" - -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "İçin Gerekli Olan" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Seri Numara" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Seri No" @@ -8724,7 +8685,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8710,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Stok Konumları" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "Bu stok kalemi için tedarikçi parçası seçin" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "Seri numaraları tam sayı listesi olmalı" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "TAMAM" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Dikkat gerekli" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Hasarlı" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Kullanılamaz durumda" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Reddedildi" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Karantinaya alındı" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Eski stok izleme girişi" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Stok kalemi oluşturuldu" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Düzenlenen stok kalemi" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Atanan seri numarası" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Stok sayıldı" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Stok manuel olarak eklendi" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Stok manuel olarak çıkarıldı" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Konum değişti" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Stok Güncellendi" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Montajda kullanıldı" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Montajdan çıkarıldı" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Bileşen ögesinde kullanıldı" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Bileşen ögesinden çıkarıldı" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Üst ögeden ayır" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Alt ögeyi ayır" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Stok parçalarını birleştir" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Yapım emri çıktısı oluşturuldu" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Yapım emri çıktısı tamamlandı" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Müşteriye gönderildi" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Müşteriden geri döndü" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9448,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9468,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9495,17 @@ msgid "Stock adjustment actions" msgstr "Stok ayarlama işlemleri" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9514,12 @@ msgid "Serialize stock" msgstr "Stoku seri numarala" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9560,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Yapım İşi" @@ -9497,7 +9626,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Konum ayarlanmadı" @@ -9528,40 +9657,40 @@ msgstr "Bu stok kaleminin süresi %(item.expiry_date)s tarihinde sona erecek" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Uyarı" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "Bu işlem kolayca geri alınamaz" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9754,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Bu konumun sahipleri listesinde değilsiniz. Bu stok konumu düzenlenemez." -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Yeni stok konumu oluştur" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Yeni Konum" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10005,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10049,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10087,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10274,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10295,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10361,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10383,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10418,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10517,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10740,26 @@ msgstr "Onay" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10960,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10974,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11139,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11329,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11349,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11404,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11573,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12019,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12056,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12089,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12138,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12264,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12502,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12526,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12542,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12762,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12775,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12832,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12886,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12906,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12997,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13059,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13416,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13424,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14070,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "Tüm bildirimleri ve içeriğini göster" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "QR sağlanamadı" @@ -14194,35 +14307,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "İzinleri ayarla" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Grup" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Görünüm" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Parçayı görüntüleme izni" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Parça ekleme izni" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Değiştir" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Parçaları düzenleme izni" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Parçaları silme izni" - diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 0000000000..cc678872fa --- /dev/null +++ b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,14336 @@ +msgid "" +msgstr "" +"Project-Id-Version: inventree\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" +"Last-Translator: \n" +"Language-Team: Ukrainian\n" +"Language: uk_UA\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n" +"X-Crowdin-Project: inventree\n" +"X-Crowdin-Project-ID: 452300\n" +"X-Crowdin-Language: uk\n" +"X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" +"X-Crowdin-File-ID: 216\n" + +#: InvenTree/api.py:272 +msgid "API endpoint not found" +msgstr "" + +#: InvenTree/api.py:536 +msgid "User does not have permission to view this model" +msgstr "" + +#: InvenTree/conversion.py:160 +#, python-brace-format +msgid "Invalid unit provided ({unit})" +msgstr "" + +#: InvenTree/conversion.py:177 +msgid "No value provided" +msgstr "" + +#: InvenTree/conversion.py:204 +#, python-brace-format +msgid "Could not convert {original} to {unit}" +msgstr "" + +#: InvenTree/conversion.py:206 +msgid "Invalid quantity supplied" +msgstr "" + +#: InvenTree/conversion.py:220 +#, python-brace-format +msgid "Invalid quantity supplied ({exc})" +msgstr "" + +#: InvenTree/exceptions.py:109 +msgid "Error details can be found in the admin panel" +msgstr "" + +#: InvenTree/fields.py:139 +msgid "Enter date" +msgstr "" + +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 +#: order/templates/order/return_order_sidebar.html:9 +#: order/templates/order/so_sidebar.html:17 part/admin.py:59 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 +#: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 +#: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 +#: templates/js/translated/part.js:1080 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 +msgid "Notes" +msgstr "" + +#: InvenTree/format.py:164 +#, python-brace-format +msgid "Value '{name}' does not appear in pattern format" +msgstr "" + +#: InvenTree/format.py:175 +msgid "Provided value does not match required pattern: " +msgstr "" + +#: InvenTree/forms.py:128 +msgid "Enter password" +msgstr "" + +#: InvenTree/forms.py:129 +msgid "Enter new password" +msgstr "" + +#: InvenTree/forms.py:138 +msgid "Confirm password" +msgstr "" + +#: InvenTree/forms.py:139 +msgid "Confirm new password" +msgstr "" + +#: InvenTree/forms.py:143 +msgid "Old password" +msgstr "" + +#: InvenTree/forms.py:182 +msgid "Email (again)" +msgstr "" + +#: InvenTree/forms.py:186 +msgid "Email address confirmation" +msgstr "" + +#: InvenTree/forms.py:209 +msgid "You must type the same email each time." +msgstr "" + +#: InvenTree/forms.py:253 InvenTree/forms.py:261 +msgid "The provided primary email address is not valid." +msgstr "" + +#: InvenTree/forms.py:268 +msgid "The provided email domain is not approved." +msgstr "" + +#: InvenTree/forms.py:395 +msgid "Registration is disabled." +msgstr "" + +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 +msgid "Invalid quantity provided" +msgstr "" + +#: InvenTree/helpers.py:533 +msgid "Empty serial number string" +msgstr "" + +#: InvenTree/helpers.py:562 +msgid "Duplicate serial" +msgstr "" + +#: InvenTree/helpers.py:594 InvenTree/helpers.py:637 +#, python-brace-format +msgid "Invalid group range: {group}" +msgstr "" + +#: InvenTree/helpers.py:625 +#, python-brace-format +msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:655 InvenTree/helpers.py:662 InvenTree/helpers.py:681 +#, python-brace-format +msgid "Invalid group sequence: {group}" +msgstr "" + +#: InvenTree/helpers.py:691 +msgid "No serial numbers found" +msgstr "" + +#: InvenTree/helpers.py:696 +msgid "Number of unique serial numbers ({len(serials)}) must match quantity ({expected_quantity})" +msgstr "" + +#: InvenTree/helpers.py:814 +msgid "Remove HTML tags from this value" +msgstr "" + +#: InvenTree/helpers_model.py:150 +msgid "Connection error" +msgstr "" + +#: InvenTree/helpers_model.py:155 InvenTree/helpers_model.py:162 +msgid "Server responded with invalid status code" +msgstr "" + +#: InvenTree/helpers_model.py:158 +msgid "Exception occurred" +msgstr "" + +#: InvenTree/helpers_model.py:168 +msgid "Server responded with invalid Content-Length value" +msgstr "" + +#: InvenTree/helpers_model.py:171 +msgid "Image size is too large" +msgstr "" + +#: InvenTree/helpers_model.py:183 +msgid "Image download exceeded maximum size" +msgstr "" + +#: InvenTree/helpers_model.py:188 +msgid "Remote server returned empty response" +msgstr "" + +#: InvenTree/helpers_model.py:196 +msgid "Supplied URL is not a valid image file" +msgstr "" + +#: InvenTree/locales.py:18 +msgid "Bulgarian" +msgstr "" + +#: InvenTree/locales.py:19 +msgid "Czech" +msgstr "" + +#: InvenTree/locales.py:20 +msgid "Danish" +msgstr "" + +#: InvenTree/locales.py:21 +msgid "German" +msgstr "" + +#: InvenTree/locales.py:22 +msgid "Greek" +msgstr "" + +#: InvenTree/locales.py:23 +msgid "English" +msgstr "" + +#: InvenTree/locales.py:24 +msgid "Spanish" +msgstr "" + +#: InvenTree/locales.py:25 +msgid "Spanish (Mexican)" +msgstr "" + +#: InvenTree/locales.py:26 +msgid "Farsi / Persian" +msgstr "" + +#: InvenTree/locales.py:27 +msgid "Finnish" +msgstr "" + +#: InvenTree/locales.py:28 +msgid "French" +msgstr "" + +#: InvenTree/locales.py:29 +msgid "Hebrew" +msgstr "" + +#: InvenTree/locales.py:30 +msgid "Hindi" +msgstr "" + +#: InvenTree/locales.py:31 +msgid "Hungarian" +msgstr "" + +#: InvenTree/locales.py:32 +msgid "Italian" +msgstr "" + +#: InvenTree/locales.py:33 +msgid "Japanese" +msgstr "" + +#: InvenTree/locales.py:34 +msgid "Korean" +msgstr "" + +#: InvenTree/locales.py:35 +msgid "Latvian" +msgstr "" + +#: InvenTree/locales.py:36 +msgid "Dutch" +msgstr "" + +#: InvenTree/locales.py:37 +msgid "Norwegian" +msgstr "" + +#: InvenTree/locales.py:38 +msgid "Polish" +msgstr "" + +#: InvenTree/locales.py:39 +msgid "Portuguese" +msgstr "" + +#: InvenTree/locales.py:40 +msgid "Portuguese (Brazilian)" +msgstr "" + +#: InvenTree/locales.py:41 +msgid "Russian" +msgstr "" + +#: InvenTree/locales.py:42 +msgid "Slovak" +msgstr "" + +#: InvenTree/locales.py:43 +msgid "Slovenian" +msgstr "" + +#: InvenTree/locales.py:44 +msgid "Serbian" +msgstr "" + +#: InvenTree/locales.py:45 +msgid "Swedish" +msgstr "" + +#: InvenTree/locales.py:46 +msgid "Thai" +msgstr "" + +#: InvenTree/locales.py:47 +msgid "Turkish" +msgstr "" + +#: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 +msgid "Vietnamese" +msgstr "" + +#: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 +msgid "Chinese (Traditional)" +msgstr "" + +#: InvenTree/magic_login.py:28 +#, python-brace-format +msgid "[{site_name}] Log in to the app" +msgstr "" + +#: InvenTree/magic_login.py:38 company/models.py:133 +#: company/templates/company/company_base.html:138 +#: templates/InvenTree/settings/user.html:49 +#: templates/js/translated/company.js:677 +msgid "Email" +msgstr "" + +#: InvenTree/models.py:107 +msgid "Error running plugin validation" +msgstr "" + +#: InvenTree/models.py:176 +msgid "Metadata must be a python dict object" +msgstr "" + +#: InvenTree/models.py:182 +msgid "Plugin Metadata" +msgstr "" + +#: InvenTree/models.py:183 +msgid "JSON metadata field, for use by external plugins" +msgstr "" + +#: InvenTree/models.py:413 +msgid "Improperly formatted pattern" +msgstr "" + +#: InvenTree/models.py:420 +msgid "Unknown format key specified" +msgstr "" + +#: InvenTree/models.py:426 +msgid "Missing required format key" +msgstr "" + +#: InvenTree/models.py:437 +msgid "Reference field cannot be empty" +msgstr "" + +#: InvenTree/models.py:445 +msgid "Reference must match required pattern" +msgstr "" + +#: InvenTree/models.py:476 +msgid "Reference number is too large" +msgstr "" + +#: InvenTree/models.py:550 +msgid "Missing file" +msgstr "" + +#: InvenTree/models.py:551 +msgid "Missing external link" +msgstr "" + +#: InvenTree/models.py:572 stock/models.py:2437 +#: templates/js/translated/attachment.js:119 +#: templates/js/translated/attachment.js:326 +msgid "Attachment" +msgstr "" + +#: InvenTree/models.py:573 +msgid "Select file to attach" +msgstr "" + +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 +#: part/templates/part/part_scheduling.html:11 +#: report/templates/report/inventree_build_order_report.html:164 +#: stock/admin.py:225 templates/js/translated/company.js:1319 +#: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 +msgid "Link" +msgstr "" + +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 +msgid "Link to external URL" +msgstr "" + +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 +#: templates/js/translated/attachment.js:341 +msgid "Comment" +msgstr "" + +#: InvenTree/models.py:589 +msgid "File comment" +msgstr "" + +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 +#: templates/js/translated/stock.js:3036 users/models.py:111 +msgid "User" +msgstr "" + +#: InvenTree/models.py:602 +msgid "upload date" +msgstr "" + +#: InvenTree/models.py:624 +msgid "Filename must not be empty" +msgstr "" + +#: InvenTree/models.py:635 +msgid "Invalid attachment directory" +msgstr "" + +#: InvenTree/models.py:665 +#, python-brace-format +msgid "Filename contains illegal character '{c}'" +msgstr "" + +#: InvenTree/models.py:668 +msgid "Filename missing extension" +msgstr "" + +#: InvenTree/models.py:677 +msgid "Attachment with this filename already exists" +msgstr "" + +#: InvenTree/models.py:684 +msgid "Error renaming file" +msgstr "" + +#: InvenTree/models.py:860 +msgid "Duplicate names cannot exist under the same parent" +msgstr "" + +#: InvenTree/models.py:877 +msgid "Invalid choice" +msgstr "" + +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 +#: templates/InvenTree/settings/mixins/urls.html:13 +#: templates/InvenTree/settings/notifications.html:17 +#: templates/InvenTree/settings/plugin.html:83 +#: templates/InvenTree/settings/plugin_settings.html:22 +#: templates/InvenTree/settings/settings_staff_js.html:67 +#: templates/InvenTree/settings/settings_staff_js.html:446 +#: templates/js/translated/company.js:676 +#: templates/js/translated/company.js:724 +#: templates/js/translated/company.js:913 +#: templates/js/translated/company.js:1165 +#: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 +#: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 +msgid "Name" +msgstr "" + +#: InvenTree/models.py:913 build/models.py:218 +#: build/templates/build/detail.html:24 common/models.py:136 +#: company/models.py:523 company/models.py:840 +#: company/templates/company/company_base.html:77 +#: company/templates/company/manufacturer_part.html:75 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 +#: part/templates/part/part_base.html:170 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 +#: templates/InvenTree/settings/notifications.html:19 +#: templates/InvenTree/settings/plugin_settings.html:27 +#: templates/InvenTree/settings/settings_staff_js.html:170 +#: templates/InvenTree/settings/settings_staff_js.html:451 +#: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 +#: templates/js/translated/company.js:1330 +#: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 +#: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 +#: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 +#: templates/js/translated/plugin.js:80 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 +#: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 +msgid "Description" +msgstr "" + +#: InvenTree/models.py:914 stock/models.py:79 +msgid "Description (optional)" +msgstr "" + +#: InvenTree/models.py:923 +msgid "parent" +msgstr "" + +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 +#: templates/js/translated/stock.js:2757 +msgid "Path" +msgstr "" + +#: InvenTree/models.py:1035 +msgid "Markdown notes (optional)" +msgstr "" + +#: InvenTree/models.py:1064 +msgid "Barcode Data" +msgstr "" + +#: InvenTree/models.py:1065 +msgid "Third party barcode data" +msgstr "" + +#: InvenTree/models.py:1071 +msgid "Barcode Hash" +msgstr "" + +#: InvenTree/models.py:1072 +msgid "Unique hash of barcode data" +msgstr "" + +#: InvenTree/models.py:1125 +msgid "Existing barcode found" +msgstr "" + +#: InvenTree/models.py:1168 +msgid "Server Error" +msgstr "" + +#: InvenTree/models.py:1169 +msgid "An error has been logged by the server." +msgstr "" + +#: InvenTree/serializers.py:62 part/models.py:4212 +msgid "Must be a valid number" +msgstr "" + +#: InvenTree/serializers.py:99 company/models.py:183 +#: company/templates/company/company_base.html:112 part/models.py:3036 +#: templates/InvenTree/settings/settings_staff_js.html:44 +#: templates/currency_data.html:5 +msgid "Currency" +msgstr "" + +#: InvenTree/serializers.py:102 +msgid "Select currency from available options" +msgstr "" + +#: InvenTree/serializers.py:441 +msgid "You do not have permission to change this user role." +msgstr "" + +#: InvenTree/serializers.py:453 +msgid "Only superusers can create new users" +msgstr "" + +#: InvenTree/serializers.py:472 +msgid "Your account has been created." +msgstr "" + +#: InvenTree/serializers.py:474 +msgid "Please use the password reset function to login" +msgstr "" + +#: InvenTree/serializers.py:481 +msgid "Welcome to InvenTree" +msgstr "" + +#: InvenTree/serializers.py:542 +msgid "Filename" +msgstr "" + +#: InvenTree/serializers.py:576 +msgid "Invalid value" +msgstr "" + +#: InvenTree/serializers.py:596 +msgid "Data File" +msgstr "" + +#: InvenTree/serializers.py:597 +msgid "Select data file for upload" +msgstr "" + +#: InvenTree/serializers.py:614 +msgid "Unsupported file type" +msgstr "" + +#: InvenTree/serializers.py:620 +msgid "File is too large" +msgstr "" + +#: InvenTree/serializers.py:641 +msgid "No columns found in file" +msgstr "" + +#: InvenTree/serializers.py:644 +msgid "No data rows found in file" +msgstr "" + +#: InvenTree/serializers.py:757 +msgid "No data rows provided" +msgstr "" + +#: InvenTree/serializers.py:760 +msgid "No data columns supplied" +msgstr "" + +#: InvenTree/serializers.py:827 +#, python-brace-format +msgid "Missing required column: '{name}'" +msgstr "" + +#: InvenTree/serializers.py:836 +#, python-brace-format +msgid "Duplicate column: '{col}'" +msgstr "" + +#: InvenTree/serializers.py:859 +msgid "Remote Image" +msgstr "" + +#: InvenTree/serializers.py:860 +msgid "URL of remote image file" +msgstr "" + +#: InvenTree/serializers.py:878 +msgid "Downloading images from remote URL is not enabled" +msgstr "" + +#: InvenTree/status.py:66 part/serializers.py:1178 +msgid "Background worker check failed" +msgstr "" + +#: InvenTree/status.py:70 +msgid "Email backend not configured" +msgstr "" + +#: InvenTree/status.py:73 +msgid "InvenTree system health checks failed" +msgstr "" + +#: InvenTree/templatetags/inventree_extras.py:183 +msgid "Unknown database" +msgstr "" + +#: InvenTree/validators.py:31 InvenTree/validators.py:33 +msgid "Invalid physical unit" +msgstr "" + +#: InvenTree/validators.py:39 +msgid "Not a valid currency code" +msgstr "" + +#: InvenTree/validators.py:121 InvenTree/validators.py:137 +msgid "Overage value must not be negative" +msgstr "" + +#: InvenTree/validators.py:139 +msgid "Overage must not exceed 100%" +msgstr "" + +#: InvenTree/validators.py:145 +msgid "Invalid value for overage" +msgstr "" + +#: InvenTree/views.py:400 templates/InvenTree/settings/user.html:23 +msgid "Edit User Information" +msgstr "" + +#: InvenTree/views.py:412 templates/InvenTree/settings/user.html:20 +msgid "Set Password" +msgstr "" + +#: InvenTree/views.py:434 +msgid "Password fields must match" +msgstr "" + +#: InvenTree/views.py:442 +msgid "Wrong password provided" +msgstr "" + +#: InvenTree/views.py:650 templates/navbar.html:160 +msgid "System Information" +msgstr "" + +#: InvenTree/views.py:657 templates/navbar.html:171 +msgid "About InvenTree" +msgstr "" + +#: build/api.py:255 +msgid "Build must be cancelled before it can be deleted" +msgstr "" + +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 +#: templates/js/translated/table_filters.js:190 +#: templates/js/translated/table_filters.js:583 +msgid "Consumable" +msgstr "" + +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 +#: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 +#: templates/js/translated/build.js:2529 +#: templates/js/translated/table_filters.js:186 +#: templates/js/translated/table_filters.js:215 +#: templates/js/translated/table_filters.js:587 +msgid "Optional" +msgstr "" + +#: build/api.py:301 templates/js/translated/table_filters.js:408 +#: templates/js/translated/table_filters.js:579 +msgid "Tracked" +msgstr "" + +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 +#: templates/js/translated/table_filters.js:571 +msgid "Allocated" +msgstr "" + +#: build/api.py:311 company/models.py:904 company/serializers.py:383 +#: company/templates/company/supplier_part.html:114 +#: templates/email/build_order_required_stock.html:19 +#: templates/email/low_stock_notification.html:17 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 +#: templates/js/translated/index.js:123 +#: templates/js/translated/model_renderers.js:234 +#: templates/js/translated/part.js:692 templates/js/translated/part.js:694 +#: templates/js/translated/part.js:699 +#: templates/js/translated/table_filters.js:340 +#: templates/js/translated/table_filters.js:575 +msgid "Available" +msgstr "" + +#: build/models.py:83 build/templates/build/build_base.html:9 +#: build/templates/build/build_base.html:27 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 +#: templates/email/overdue_build_order.html:15 +#: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 +msgid "Build Order" +msgstr "" + +#: build/models.py:84 build/templates/build/build_base.html:13 +#: build/templates/build/index.html:8 build/templates/build/index.html:12 +#: order/templates/order/sales_order_detail.html:111 +#: order/templates/order/so_sidebar.html:13 +#: part/templates/part/part_sidebar.html:22 templates/InvenTree/index.html:196 +#: templates/InvenTree/search.html:141 +#: templates/InvenTree/settings/sidebar.html:55 +#: templates/js/translated/search.js:186 users/models.py:207 +msgid "Build Orders" +msgstr "" + +#: build/models.py:131 +msgid "Invalid choice for parent build" +msgstr "" + +#: build/models.py:142 order/models.py:240 +msgid "Responsible user or group must be specified" +msgstr "" + +#: build/models.py:148 +msgid "Build order part cannot be changed" +msgstr "" + +#: build/models.py:209 +msgid "Build Order Reference" +msgstr "" + +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 +#: report/templates/report/inventree_bill_of_materials_report.html:139 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 +#: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 +#: templates/js/translated/pricing.js:386 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 +msgid "Reference" +msgstr "" + +#: build/models.py:221 +msgid "Brief description of the build (optional)" +msgstr "" + +#: build/models.py:229 build/templates/build/build_base.html:183 +#: build/templates/build/detail.html:87 +msgid "Parent Build" +msgstr "" + +#: build/models.py:230 +msgid "BuildOrder to which this build is allocated" +msgstr "" + +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 +#: part/templates/part/part_app_base.html:8 +#: part/templates/part/part_pricing.html:12 +#: part/templates/part/upload_bom.html:52 +#: report/templates/report/inventree_bill_of_materials_report.html:110 +#: report/templates/report/inventree_bill_of_materials_report.html:137 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 +#: templates/email/build_order_completed.html:17 +#: templates/email/build_order_required_stock.html:17 +#: templates/email/low_stock_notification.html:15 +#: templates/email/overdue_build_order.html:16 +#: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 +#: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 +#: templates/js/translated/company.js:348 +#: templates/js/translated/company.js:1116 +#: templates/js/translated/company.js:1271 +#: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 +#: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 +#: templates/js/translated/purchase_order.js:751 +#: templates/js/translated/purchase_order.js:1304 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 +#: templates/js/translated/sales_order.js:300 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 +#: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 +#: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 +#: templates/js/translated/stock.js:3236 +msgid "Part" +msgstr "" + +#: build/models.py:243 +msgid "Select part to build" +msgstr "" + +#: build/models.py:248 +msgid "Sales Order Reference" +msgstr "" + +#: build/models.py:252 +msgid "SalesOrder to which this build is allocated" +msgstr "" + +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 +msgid "Source Location" +msgstr "" + +#: build/models.py:261 +msgid "Select location to take stock from for this build (leave blank to take from any stock location)" +msgstr "" + +#: build/models.py:266 +msgid "Destination Location" +msgstr "" + +#: build/models.py:270 +msgid "Select location where the completed items will be stored" +msgstr "" + +#: build/models.py:274 +msgid "Build Quantity" +msgstr "" + +#: build/models.py:277 +msgid "Number of stock items to build" +msgstr "" + +#: build/models.py:281 +msgid "Completed items" +msgstr "" + +#: build/models.py:283 +msgid "Number of stock items which have been completed" +msgstr "" + +#: build/models.py:287 +msgid "Build Status" +msgstr "" + +#: build/models.py:291 +msgid "Build status code" +msgstr "" + +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 +#: templates/js/translated/purchase_order.js:1129 +msgid "Batch Code" +msgstr "" + +#: build/models.py:304 build/serializers.py:288 +msgid "Batch code for this build output" +msgstr "" + +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 +msgid "Creation Date" +msgstr "" + +#: build/models.py:311 +msgid "Target completion date" +msgstr "" + +#: build/models.py:312 +msgid "Target date for build completion. Build will be overdue after this date." +msgstr "" + +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 +msgid "Completion Date" +msgstr "" + +#: build/models.py:321 +msgid "completed by" +msgstr "" + +#: build/models.py:329 templates/js/translated/build.js:2207 +msgid "Issued by" +msgstr "" + +#: build/models.py:330 +msgid "User who issued this build order" +msgstr "" + +#: build/models.py:338 build/templates/build/build_base.html:204 +#: build/templates/build/detail.html:122 common/models.py:145 +#: order/models.py:334 order/templates/order/order_base.html:217 +#: order/templates/order/return_order_base.html:188 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 +#: part/templates/part/part_base.html:390 +#: report/templates/report/inventree_build_order_report.html:158 +#: templates/InvenTree/settings/settings_staff_js.html:150 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 +#: templates/js/translated/table_filters.js:531 +msgid "Responsible" +msgstr "" + +#: build/models.py:339 +msgid "User or group responsible for this build order" +msgstr "" + +#: build/models.py:344 build/templates/build/detail.html:108 +#: company/templates/company/manufacturer_part.html:107 +#: company/templates/company/supplier_part.html:194 +#: order/templates/order/order_base.html:167 +#: order/templates/order/return_order_base.html:145 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 +#: stock/templates/stock/item_base.html:200 +#: templates/js/translated/company.js:1019 +msgid "External Link" +msgstr "" + +#: build/models.py:349 +msgid "Build Priority" +msgstr "" + +#: build/models.py:352 +msgid "Priority of this build order" +msgstr "" + +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 +#: templates/js/translated/table_filters.js:48 +#: templates/project_code_data.html:6 +msgid "Project Code" +msgstr "" + +#: build/models.py:360 +msgid "Project code for this build order" +msgstr "" + +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 +#, python-brace-format +msgid "Build order {build} has been completed" +msgstr "" + +#: build/models.py:621 +msgid "A build order has been completed" +msgstr "" + +#: build/models.py:847 build/models.py:932 +msgid "No build output specified" +msgstr "" + +#: build/models.py:850 +msgid "Build output is already completed" +msgstr "" + +#: build/models.py:853 +msgid "Build output does not match Build Order" +msgstr "" + +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 +msgid "Quantity must be greater than zero" +msgstr "" + +#: build/models.py:941 build/serializers.py:225 +msgid "Quantity cannot be greater than the output quantity" +msgstr "" + +#: build/models.py:1001 build/serializers.py:548 +#, python-brace-format +msgid "Build output {serial} has not passed all required tests" +msgstr "" + +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 +msgid "Build object" +msgstr "" + +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 +#: part/templates/part/part_pricing.html:16 +#: part/templates/part/upload_bom.html:53 +#: report/templates/report/inventree_bill_of_materials_report.html:138 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 +#: stock/templates/stock/item_base.html:287 +#: stock/templates/stock/item_base.html:295 +#: stock/templates/stock/item_base.html:342 +#: templates/email/build_order_completed.html:18 +#: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 +#: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 +#: templates/js/translated/company.js:1818 +#: templates/js/translated/model_renderers.js:236 +#: templates/js/translated/order.js:304 templates/js/translated/part.js:961 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 +#: templates/js/translated/pricing.js:381 +#: templates/js/translated/pricing.js:474 +#: templates/js/translated/pricing.js:522 +#: templates/js/translated/pricing.js:616 +#: templates/js/translated/purchase_order.js:754 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 +#: templates/js/translated/sales_order.js:317 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 +#: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 +#: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 +#: templates/js/translated/stock.js:3104 +msgid "Quantity" +msgstr "" + +#: build/models.py:1392 +msgid "Required quantity for build order" +msgstr "" + +#: build/models.py:1472 +msgid "Build item must specify a build output, as master part is marked as trackable" +msgstr "" + +#: build/models.py:1481 +#, python-brace-format +msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" +msgstr "" + +#: build/models.py:1491 order/models.py:1918 +msgid "Stock item is over-allocated" +msgstr "" + +#: build/models.py:1497 order/models.py:1921 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: build/models.py:1503 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1562 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 +#: stock/templates/stock/item_base.html:23 +#: stock/templates/stock/item_base.html:194 +#: templates/js/translated/build.js:1745 +#: templates/js/translated/sales_order.js:301 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 +#: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 +#: templates/js/translated/stock.js:2977 +msgid "Stock Item" +msgstr "" + +#: build/models.py:1635 +msgid "Source stock item" +msgstr "" + +#: build/models.py:1648 +msgid "Stock quantity to allocate to build" +msgstr "" + +#: build/models.py:1656 +msgid "Install into" +msgstr "" + +#: build/models.py:1657 +msgid "Destination stock item" +msgstr "" + +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 +msgid "Build Output" +msgstr "" + +#: build/serializers.py:169 +msgid "Build output does not match the parent build" +msgstr "" + +#: build/serializers.py:173 +msgid "Output part does not match BuildOrder part" +msgstr "" + +#: build/serializers.py:177 +msgid "This build output has already been completed" +msgstr "" + +#: build/serializers.py:188 +msgid "This build output is not fully allocated" +msgstr "" + +#: build/serializers.py:208 build/serializers.py:255 +msgid "Enter quantity for build output" +msgstr "" + +#: build/serializers.py:276 +msgid "Integer quantity required for trackable parts" +msgstr "" + +#: build/serializers.py:279 +msgid "Integer quantity required, as the bill of materials contains trackable parts" +msgstr "" + +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 +#: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 +msgid "Serial Numbers" +msgstr "" + +#: build/serializers.py:295 +msgid "Enter serial numbers for build outputs" +msgstr "" + +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 +#: templates/js/translated/barcode.js:547 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 +#: templates/js/translated/purchase_order.js:1178 +#: templates/js/translated/purchase_order.js:1268 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 +#: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 +#: templates/js/translated/stock.js:2871 +msgid "Location" +msgstr "" + +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 +msgid "Stock location for scrapped outputs" +msgstr "" + +#: build/serializers.py:448 +msgid "Discard Allocations" +msgstr "" + +#: build/serializers.py:449 +msgid "Discard any stock allocations for scrapped outputs" +msgstr "" + +#: build/serializers.py:454 +msgid "Reason for scrapping build output(s)" +msgstr "" + +#: build/serializers.py:514 +msgid "Location for completed build outputs" +msgstr "" + +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 +#: stock/templates/stock/item_base.html:427 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 +#: templates/js/translated/purchase_order.js:1308 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 +#: templates/js/translated/stock.js:3120 +msgid "Status" +msgstr "" + +#: build/serializers.py:526 +msgid "Accept Incomplete Allocation" +msgstr "" + +#: build/serializers.py:527 +msgid "Complete outputs if stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" + +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" + +#: build/serializers.py:619 +msgid "Remove Incomplete Outputs" +msgstr "" + +#: build/serializers.py:620 +msgid "Delete any build outputs which have not been completed" +msgstr "" + +#: build/serializers.py:647 +msgid "Not permitted" +msgstr "" + +#: build/serializers.py:648 +msgid "Accept as consumed by this build order" +msgstr "" + +#: build/serializers.py:649 +msgid "Deallocate before completing this build order" +msgstr "" + +#: build/serializers.py:679 +msgid "Overallocated Stock" +msgstr "" + +#: build/serializers.py:681 +msgid "How do you want to handle extra stock items assigned to the build order" +msgstr "" + +#: build/serializers.py:691 +msgid "Some stock items have been overallocated" +msgstr "" + +#: build/serializers.py:696 +msgid "Accept Unallocated" +msgstr "" + +#: build/serializers.py:697 +msgid "Accept that stock items have not been fully allocated to this build order" +msgstr "" + +#: build/serializers.py:707 templates/js/translated/build.js:315 +msgid "Required stock has not been fully allocated" +msgstr "" + +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 +msgid "Accept Incomplete" +msgstr "" + +#: build/serializers.py:713 +msgid "Accept that the required number of build outputs have not been completed" +msgstr "" + +#: build/serializers.py:723 templates/js/translated/build.js:319 +msgid "Required build quantity has not been completed" +msgstr "" + +#: build/serializers.py:732 templates/js/translated/build.js:303 +msgid "Build order has incomplete outputs" +msgstr "" + +#: build/serializers.py:770 +msgid "Build Line" +msgstr "" + +#: build/serializers.py:780 +msgid "Build output" +msgstr "" + +#: build/serializers.py:788 +msgid "Build output must point to the same build" +msgstr "" + +#: build/serializers.py:824 +msgid "Build Line Item" +msgstr "" + +#: build/serializers.py:838 +msgid "bom_item.part must point to the same part as the build order" +msgstr "" + +#: build/serializers.py:853 stock/serializers.py:1194 +msgid "Item must be in stock" +msgstr "" + +#: build/serializers.py:901 order/serializers.py:1237 +#, python-brace-format +msgid "Available quantity ({q}) exceeded" +msgstr "" + +#: build/serializers.py:907 +msgid "Build output must be specified for allocation of tracked parts" +msgstr "" + +#: build/serializers.py:914 +msgid "Build output cannot be specified for allocation of untracked parts" +msgstr "" + +#: build/serializers.py:938 order/serializers.py:1489 +msgid "Allocation items must be provided" +msgstr "" + +#: build/serializers.py:1001 +msgid "Stock location where parts are to be sourced (leave blank to take from any location)" +msgstr "" + +#: build/serializers.py:1009 +msgid "Exclude Location" +msgstr "" + +#: build/serializers.py:1010 +msgid "Exclude stock items from this selected location" +msgstr "" + +#: build/serializers.py:1015 +msgid "Interchangeable Stock" +msgstr "" + +#: build/serializers.py:1016 +msgid "Stock items in multiple locations can be used interchangeably" +msgstr "" + +#: build/serializers.py:1021 +msgid "Substitute Stock" +msgstr "" + +#: build/serializers.py:1022 +msgid "Allow allocation of substitute parts" +msgstr "" + +#: build/serializers.py:1027 +msgid "Optional Items" +msgstr "" + +#: build/serializers.py:1028 +msgid "Allocate optional BOM items to build order" +msgstr "" + +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 +msgid "BOM Item" +msgstr "" + +#: build/serializers.py:1149 templates/js/translated/index.js:130 +msgid "Allocated Stock" +msgstr "" + +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 +#: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 +#: templates/js/translated/part.js:2148 +#: templates/js/translated/table_filters.js:170 +msgid "On Order" +msgstr "" + +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 +#: templates/js/translated/table_filters.js:360 +msgid "In Production" +msgstr "" + +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 +#: part/templates/part/part_base.html:192 +#: templates/js/translated/sales_order.js:1929 +msgid "Available Stock" +msgstr "" + +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 +msgid "Stock required for build order" +msgstr "" + +#: build/tasks.py:201 +msgid "Overdue Build Order" +msgstr "" + +#: build/tasks.py:206 +#, python-brace-format +msgid "Build order {bo} is now overdue" +msgstr "" + +#: build/templates/build/build_base.html:18 +msgid "Part thumbnail" +msgstr "" + +#: build/templates/build/build_base.html:38 +#: company/templates/company/supplier_part.html:35 +#: order/templates/order/order_base.html:29 +#: order/templates/order/return_order_base.html:38 +#: order/templates/order/sales_order_base.html:38 +#: part/templates/part/part_base.html:41 +#: stock/templates/stock/item_base.html:40 +#: stock/templates/stock/location.html:55 +#: templates/js/translated/filters.js:335 +msgid "Barcode actions" +msgstr "" + +#: build/templates/build/build_base.html:42 +#: company/templates/company/supplier_part.html:39 +#: order/templates/order/order_base.html:33 +#: order/templates/order/return_order_base.html:42 +#: order/templates/order/sales_order_base.html:42 +#: part/templates/part/part_base.html:44 +#: stock/templates/stock/item_base.html:44 +#: stock/templates/stock/location.html:57 templates/qr_button.html:1 +msgid "Show QR Code" +msgstr "" + +#: build/templates/build/build_base.html:45 +#: company/templates/company/supplier_part.html:41 +#: order/templates/order/order_base.html:36 +#: order/templates/order/return_order_base.html:45 +#: order/templates/order/sales_order_base.html:45 +#: part/templates/part/part_base.html:47 +#: stock/templates/stock/item_base.html:47 +#: stock/templates/stock/location.html:59 +#: templates/js/translated/barcode.js:496 +#: templates/js/translated/barcode.js:501 +msgid "Unlink Barcode" +msgstr "" + +#: build/templates/build/build_base.html:47 +#: company/templates/company/supplier_part.html:43 +#: order/templates/order/order_base.html:38 +#: order/templates/order/return_order_base.html:47 +#: order/templates/order/sales_order_base.html:47 +#: part/templates/part/part_base.html:49 +#: stock/templates/stock/item_base.html:49 +#: stock/templates/stock/location.html:61 +msgid "Link Barcode" +msgstr "" + +#: build/templates/build/build_base.html:56 +#: order/templates/order/order_base.html:46 +#: order/templates/order/return_order_base.html:55 +#: order/templates/order/sales_order_base.html:55 +msgid "Print actions" +msgstr "" + +#: build/templates/build/build_base.html:60 +msgid "Print build order report" +msgstr "" + +#: build/templates/build/build_base.html:67 +msgid "Build actions" +msgstr "" + +#: build/templates/build/build_base.html:71 +msgid "Edit Build" +msgstr "" + +#: build/templates/build/build_base.html:73 +msgid "Cancel Build" +msgstr "" + +#: build/templates/build/build_base.html:76 +msgid "Duplicate Build" +msgstr "" + +#: build/templates/build/build_base.html:79 +msgid "Delete Build" +msgstr "" + +#: build/templates/build/build_base.html:84 +#: build/templates/build/build_base.html:85 +msgid "Complete Build" +msgstr "" + +#: build/templates/build/build_base.html:107 +msgid "Build Description" +msgstr "" + +#: build/templates/build/build_base.html:117 +msgid "No build outputs have been created for this build order" +msgstr "" + +#: build/templates/build/build_base.html:124 +msgid "Build Order is ready to mark as completed" +msgstr "" + +#: build/templates/build/build_base.html:129 +msgid "Build Order cannot be completed as outstanding outputs remain" +msgstr "" + +#: build/templates/build/build_base.html:134 +msgid "Required build quantity has not yet been completed" +msgstr "" + +#: build/templates/build/build_base.html:139 +msgid "Stock has not been fully allocated to this Build Order" +msgstr "" + +#: build/templates/build/build_base.html:160 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 +#: order/templates/order/return_order_base.html:164 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 +msgid "Target Date" +msgstr "" + +#: build/templates/build/build_base.html:165 +#, python-format +msgid "This build was due on %(target)s" +msgstr "" + +#: build/templates/build/build_base.html:165 +#: build/templates/build/build_base.html:222 +#: order/templates/order/order_base.html:122 +#: order/templates/order/return_order_base.html:117 +#: order/templates/order/sales_order_base.html:126 +#: templates/js/translated/table_filters.js:98 +#: templates/js/translated/table_filters.js:524 +#: templates/js/translated/table_filters.js:626 +#: templates/js/translated/table_filters.js:667 +msgid "Overdue" +msgstr "" + +#: build/templates/build/build_base.html:177 +#: build/templates/build/detail.html:67 build/templates/build/sidebar.html:13 +msgid "Completed Outputs" +msgstr "" + +#: build/templates/build/build_base.html:190 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 +#: order/templates/order/sales_order_base.html:9 +#: order/templates/order/sales_order_base.html:28 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 +#: stock/templates/stock/item_base.html:369 +#: templates/email/overdue_sales_order.html:15 +#: templates/js/translated/pricing.js:929 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 +#: templates/js/translated/stock.js:2924 +msgid "Sales Order" +msgstr "" + +#: build/templates/build/build_base.html:197 +#: build/templates/build/detail.html:115 +#: report/templates/report/inventree_build_order_report.html:152 +#: templates/js/translated/table_filters.js:24 +msgid "Issued By" +msgstr "" + +#: build/templates/build/build_base.html:211 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 +msgid "Priority" +msgstr "" + +#: build/templates/build/build_base.html:269 +msgid "Delete Build Order" +msgstr "" + +#: build/templates/build/build_base.html:279 +msgid "Build Order QR Code" +msgstr "" + +#: build/templates/build/build_base.html:291 +msgid "Link Barcode to Build Order" +msgstr "" + +#: build/templates/build/detail.html:15 +msgid "Build Details" +msgstr "" + +#: build/templates/build/detail.html:38 +msgid "Stock Source" +msgstr "" + +#: build/templates/build/detail.html:43 +msgid "Stock can be taken from any available location." +msgstr "" + +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 +msgid "Destination" +msgstr "" + +#: build/templates/build/detail.html:56 +msgid "Destination location not specified" +msgstr "" + +#: build/templates/build/detail.html:73 +msgid "Allocated Parts" +msgstr "" + +#: build/templates/build/detail.html:80 stock/admin.py:163 +#: stock/templates/stock/item_base.html:162 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 +#: templates/js/translated/purchase_order.js:1274 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 +#: templates/js/translated/stock.js:3127 +#: templates/js/translated/table_filters.js:313 +#: templates/js/translated/table_filters.js:404 +msgid "Batch" +msgstr "" + +#: build/templates/build/detail.html:133 +#: order/templates/order/order_base.html:173 +#: order/templates/order/return_order_base.html:151 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 +msgid "Created" +msgstr "" + +#: build/templates/build/detail.html:144 +msgid "No target date set" +msgstr "" + +#: build/templates/build/detail.html:149 +#: order/templates/order/sales_order_base.html:206 +#: templates/js/translated/table_filters.js:689 +msgid "Completed" +msgstr "" + +#: build/templates/build/detail.html:153 +msgid "Build not complete" +msgstr "" + +#: build/templates/build/detail.html:164 build/templates/build/sidebar.html:17 +msgid "Child Build Orders" +msgstr "" + +#: build/templates/build/detail.html:177 +msgid "Allocate Stock to Build" +msgstr "" + +#: build/templates/build/detail.html:181 +msgid "Deallocate stock" +msgstr "" + +#: build/templates/build/detail.html:182 +msgid "Deallocate Stock" +msgstr "" + +#: build/templates/build/detail.html:184 +msgid "Automatically allocate stock to build" +msgstr "" + +#: build/templates/build/detail.html:185 +msgid "Auto Allocate" +msgstr "" + +#: build/templates/build/detail.html:187 +msgid "Manually allocate stock to build" +msgstr "" + +#: build/templates/build/detail.html:188 build/templates/build/sidebar.html:8 +msgid "Allocate Stock" +msgstr "" + +#: build/templates/build/detail.html:191 +msgid "Order required parts" +msgstr "" + +#: build/templates/build/detail.html:192 +#: templates/js/translated/purchase_order.js:795 +msgid "Order Parts" +msgstr "" + +#: build/templates/build/detail.html:205 +msgid "Available stock has been filtered based on specified source location for this build order" +msgstr "" + +#: build/templates/build/detail.html:215 +msgid "Incomplete Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:219 +msgid "Create new build output" +msgstr "" + +#: build/templates/build/detail.html:220 +msgid "New Build Output" +msgstr "" + +#: build/templates/build/detail.html:237 build/templates/build/sidebar.html:15 +msgid "Consumed Stock" +msgstr "" + +#: build/templates/build/detail.html:249 +msgid "Completed Build Outputs" +msgstr "" + +#: build/templates/build/detail.html:261 build/templates/build/sidebar.html:19 +#: company/templates/company/detail.html:229 +#: company/templates/company/manufacturer_part.html:141 +#: company/templates/company/manufacturer_part_sidebar.html:9 +#: company/templates/company/sidebar.html:39 +#: order/templates/order/po_sidebar.html:9 +#: order/templates/order/purchase_order_detail.html:84 +#: order/templates/order/return_order_detail.html:70 +#: order/templates/order/return_order_sidebar.html:7 +#: order/templates/order/sales_order_detail.html:124 +#: order/templates/order/so_sidebar.html:15 part/templates/part/detail.html:217 +#: part/templates/part/part_sidebar.html:61 stock/templates/stock/item.html:110 +#: stock/templates/stock/stock_sidebar.html:23 +msgid "Attachments" +msgstr "" + +#: build/templates/build/detail.html:276 +msgid "Build Notes" +msgstr "" + +#: build/templates/build/detail.html:435 +msgid "Allocation Complete" +msgstr "" + +#: build/templates/build/detail.html:436 +msgid "All lines have been fully allocated" +msgstr "" + +#: build/templates/build/index.html:18 part/templates/part/detail.html:319 +msgid "New Build Order" +msgstr "" + +#: build/templates/build/sidebar.html:5 +msgid "Build Order Details" +msgstr "" + +#: build/templates/build/sidebar.html:10 +msgid "Incomplete Outputs" +msgstr "" + +#: common/files.py:63 +#, python-brace-format +msgid "Unsupported file format: {fmt}" +msgstr "" + +#: common/files.py:65 +msgid "Error reading file (invalid encoding)" +msgstr "" + +#: common/files.py:70 +msgid "Error reading file (invalid format)" +msgstr "" + +#: common/files.py:72 +msgid "Error reading file (incorrect dimension)" +msgstr "" + +#: common/files.py:74 +msgid "Error reading file (data could be corrupted)" +msgstr "" + +#: common/forms.py:12 +msgid "File" +msgstr "" + +#: common/forms.py:12 +msgid "Select file to upload" +msgstr "" + +#: common/forms.py:25 +msgid "{name.title()} File" +msgstr "" + +#: common/forms.py:26 +#, python-brace-format +msgid "Select {name} file to upload" +msgstr "" + +#: common/models.py:71 +msgid "Updated" +msgstr "" + +#: common/models.py:72 +msgid "Timestamp of last update" +msgstr "" + +#: common/models.py:105 +msgid "Site URL is locked by configuration" +msgstr "" + +#: common/models.py:130 +msgid "Unique project code" +msgstr "" + +#: common/models.py:137 +msgid "Project description" +msgstr "" + +#: common/models.py:146 +msgid "User or group responsible for this project" +msgstr "" + +#: common/models.py:766 +msgid "Settings key (must be unique - case insensitive)" +msgstr "" + +#: common/models.py:770 +msgid "Settings value" +msgstr "" + +#: common/models.py:822 +msgid "Chosen value is not a valid option" +msgstr "" + +#: common/models.py:838 +msgid "Value must be a boolean value" +msgstr "" + +#: common/models.py:846 +msgid "Value must be an integer value" +msgstr "" + +#: common/models.py:883 +msgid "Key string must be unique" +msgstr "" + +#: common/models.py:1115 +msgid "No group" +msgstr "" + +#: common/models.py:1158 +msgid "An empty domain is not allowed." +msgstr "" + +#: common/models.py:1160 +#, python-brace-format +msgid "Invalid domain name: {domain}" +msgstr "" + +#: common/models.py:1172 +msgid "No plugin" +msgstr "" + +#: common/models.py:1260 +msgid "Restart required" +msgstr "" + +#: common/models.py:1262 +msgid "A setting has been changed which requires a server restart" +msgstr "" + +#: common/models.py:1269 +msgid "Pending migrations" +msgstr "" + +#: common/models.py:1270 +msgid "Number of pending database migrations" +msgstr "" + +#: common/models.py:1275 +msgid "Server Instance Name" +msgstr "" + +#: common/models.py:1277 +msgid "String descriptor for the server instance" +msgstr "" + +#: common/models.py:1281 +msgid "Use instance name" +msgstr "" + +#: common/models.py:1282 +msgid "Use the instance name in the title-bar" +msgstr "" + +#: common/models.py:1287 +msgid "Restrict showing `about`" +msgstr "" + +#: common/models.py:1288 +msgid "Show the `about` modal only to superusers" +msgstr "" + +#: common/models.py:1293 company/models.py:108 company/models.py:109 +msgid "Company name" +msgstr "" + +#: common/models.py:1294 +msgid "Internal company name" +msgstr "" + +#: common/models.py:1298 +msgid "Base URL" +msgstr "" + +#: common/models.py:1299 +msgid "Base URL for server instance" +msgstr "" + +#: common/models.py:1305 +msgid "Default Currency" +msgstr "" + +#: common/models.py:1306 +msgid "Select base currency for pricing calculations" +msgstr "" + +#: common/models.py:1312 +msgid "Currency Update Interval" +msgstr "" + +#: common/models.py:1314 +msgid "How often to update exchange rates (set to zero to disable)" +msgstr "" + +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 +msgid "days" +msgstr "" + +#: common/models.py:1321 +msgid "Currency Update Plugin" +msgstr "" + +#: common/models.py:1322 +msgid "Currency update plugin to use" +msgstr "" + +#: common/models.py:1327 +msgid "Download from URL" +msgstr "" + +#: common/models.py:1329 +msgid "Allow download of remote images and files from external URL" +msgstr "" + +#: common/models.py:1335 +msgid "Download Size Limit" +msgstr "" + +#: common/models.py:1336 +msgid "Maximum allowable download size for remote image" +msgstr "" + +#: common/models.py:1342 +msgid "User-agent used to download from URL" +msgstr "" + +#: common/models.py:1344 +msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" +msgstr "" + +#: common/models.py:1349 +msgid "Strict URL Validation" +msgstr "" + +#: common/models.py:1350 +msgid "Require schema specification when validating URLs" +msgstr "" + +#: common/models.py:1355 +msgid "Require confirm" +msgstr "" + +#: common/models.py:1356 +msgid "Require explicit user confirmation for certain action." +msgstr "" + +#: common/models.py:1361 +msgid "Tree Depth" +msgstr "" + +#: common/models.py:1363 +msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." +msgstr "" + +#: common/models.py:1369 +msgid "Update Check Interval" +msgstr "" + +#: common/models.py:1370 +msgid "How often to check for updates (set to zero to disable)" +msgstr "" + +#: common/models.py:1376 +msgid "Automatic Backup" +msgstr "" + +#: common/models.py:1377 +msgid "Enable automatic backup of database and media files" +msgstr "" + +#: common/models.py:1382 +msgid "Auto Backup Interval" +msgstr "" + +#: common/models.py:1383 +msgid "Specify number of days between automated backup events" +msgstr "" + +#: common/models.py:1389 +msgid "Task Deletion Interval" +msgstr "" + +#: common/models.py:1391 +msgid "Background task results will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1398 +msgid "Error Log Deletion Interval" +msgstr "" + +#: common/models.py:1400 +msgid "Error logs will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1407 +msgid "Notification Deletion Interval" +msgstr "" + +#: common/models.py:1409 +msgid "User notifications will be deleted after specified number of days" +msgstr "" + +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 +msgid "Barcode Support" +msgstr "" + +#: common/models.py:1417 +msgid "Enable barcode scanner support in the web interface" +msgstr "" + +#: common/models.py:1422 +msgid "Barcode Input Delay" +msgstr "" + +#: common/models.py:1423 +msgid "Barcode input processing delay time" +msgstr "" + +#: common/models.py:1429 +msgid "Barcode Webcam Support" +msgstr "" + +#: common/models.py:1430 +msgid "Allow barcode scanning via webcam in browser" +msgstr "" + +#: common/models.py:1435 +msgid "Part Revisions" +msgstr "" + +#: common/models.py:1436 +msgid "Enable revision field for Part" +msgstr "" + +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 +msgid "IPN Regex" +msgstr "" + +#: common/models.py:1448 +msgid "Regular expression pattern for matching Part IPN" +msgstr "" + +#: common/models.py:1451 +msgid "Allow Duplicate IPN" +msgstr "" + +#: common/models.py:1452 +msgid "Allow multiple parts to share the same IPN" +msgstr "" + +#: common/models.py:1457 +msgid "Allow Editing IPN" +msgstr "" + +#: common/models.py:1458 +msgid "Allow changing the IPN value while editing a part" +msgstr "" + +#: common/models.py:1463 +msgid "Copy Part BOM Data" +msgstr "" + +#: common/models.py:1464 +msgid "Copy BOM data by default when duplicating a part" +msgstr "" + +#: common/models.py:1469 +msgid "Copy Part Parameter Data" +msgstr "" + +#: common/models.py:1470 +msgid "Copy parameter data by default when duplicating a part" +msgstr "" + +#: common/models.py:1475 +msgid "Copy Part Test Data" +msgstr "" + +#: common/models.py:1476 +msgid "Copy test data by default when duplicating a part" +msgstr "" + +#: common/models.py:1481 +msgid "Copy Category Parameter Templates" +msgstr "" + +#: common/models.py:1482 +msgid "Copy category parameter templates when creating a part" +msgstr "" + +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 +#: templates/js/translated/table_filters.js:139 +#: templates/js/translated/table_filters.js:767 +msgid "Template" +msgstr "" + +#: common/models.py:1488 +msgid "Parts are templates by default" +msgstr "" + +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 +#: templates/js/translated/bom.js:1639 +#: templates/js/translated/table_filters.js:330 +#: templates/js/translated/table_filters.js:721 +msgid "Assembly" +msgstr "" + +#: common/models.py:1494 +msgid "Parts can be assembled from other components by default" +msgstr "" + +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 +#: templates/js/translated/table_filters.js:729 +msgid "Component" +msgstr "" + +#: common/models.py:1500 +msgid "Parts can be used as sub-components by default" +msgstr "" + +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 +msgid "Purchaseable" +msgstr "" + +#: common/models.py:1506 +msgid "Parts are purchaseable by default" +msgstr "" + +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 +#: templates/js/translated/table_filters.js:755 +msgid "Salable" +msgstr "" + +#: common/models.py:1512 +msgid "Parts are salable by default" +msgstr "" + +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 +#: templates/js/translated/table_filters.js:147 +#: templates/js/translated/table_filters.js:223 +#: templates/js/translated/table_filters.js:771 +msgid "Trackable" +msgstr "" + +#: common/models.py:1518 +msgid "Parts are trackable by default" +msgstr "" + +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 +#: part/templates/part/part_base.html:154 +#: templates/js/translated/table_filters.js:143 +#: templates/js/translated/table_filters.js:775 +msgid "Virtual" +msgstr "" + +#: common/models.py:1524 +msgid "Parts are virtual by default" +msgstr "" + +#: common/models.py:1529 +msgid "Show Import in Views" +msgstr "" + +#: common/models.py:1530 +msgid "Display the import wizard in some part views" +msgstr "" + +#: common/models.py:1535 +msgid "Show related parts" +msgstr "" + +#: common/models.py:1536 +msgid "Display related parts for a part" +msgstr "" + +#: common/models.py:1541 +msgid "Initial Stock Data" +msgstr "" + +#: common/models.py:1542 +msgid "Allow creation of initial stock when adding a new part" +msgstr "" + +#: common/models.py:1547 templates/js/translated/part.js:107 +msgid "Initial Supplier Data" +msgstr "" + +#: common/models.py:1549 +msgid "Allow creation of initial supplier data when adding a new part" +msgstr "" + +#: common/models.py:1555 +msgid "Part Name Display Format" +msgstr "" + +#: common/models.py:1556 +msgid "Format to display the part name" +msgstr "" + +#: common/models.py:1562 +msgid "Part Category Default Icon" +msgstr "" + +#: common/models.py:1563 +msgid "Part category default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1567 +msgid "Enforce Parameter Units" +msgstr "" + +#: common/models.py:1569 +msgid "If units are provided, parameter values must match the specified units" +msgstr "" + +#: common/models.py:1575 +msgid "Minimum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1577 +msgid "Minimum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1583 +msgid "Maximum Pricing Decimal Places" +msgstr "" + +#: common/models.py:1585 +msgid "Maximum number of decimal places to display when rendering pricing data" +msgstr "" + +#: common/models.py:1591 +msgid "Use Supplier Pricing" +msgstr "" + +#: common/models.py:1593 +msgid "Include supplier price breaks in overall pricing calculations" +msgstr "" + +#: common/models.py:1599 +msgid "Purchase History Override" +msgstr "" + +#: common/models.py:1601 +msgid "Historical purchase order pricing overrides supplier price breaks" +msgstr "" + +#: common/models.py:1607 +msgid "Use Stock Item Pricing" +msgstr "" + +#: common/models.py:1609 +msgid "Use pricing from manually entered stock data for pricing calculations" +msgstr "" + +#: common/models.py:1615 +msgid "Stock Item Pricing Age" +msgstr "" + +#: common/models.py:1617 +msgid "Exclude stock items older than this number of days from pricing calculations" +msgstr "" + +#: common/models.py:1624 +msgid "Use Variant Pricing" +msgstr "" + +#: common/models.py:1625 +msgid "Include variant pricing in overall pricing calculations" +msgstr "" + +#: common/models.py:1630 +msgid "Active Variants Only" +msgstr "" + +#: common/models.py:1632 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "" + +#: common/models.py:1638 +msgid "Pricing Rebuild Interval" +msgstr "" + +#: common/models.py:1640 +msgid "Number of days before part pricing is automatically updated" +msgstr "" + +#: common/models.py:1647 +msgid "Internal Prices" +msgstr "" + +#: common/models.py:1648 +msgid "Enable internal prices for parts" +msgstr "" + +#: common/models.py:1653 +msgid "Internal Price Override" +msgstr "" + +#: common/models.py:1655 +msgid "If available, internal prices override price range calculations" +msgstr "" + +#: common/models.py:1661 +msgid "Enable label printing" +msgstr "" + +#: common/models.py:1662 +msgid "Enable label printing from the web interface" +msgstr "" + +#: common/models.py:1667 +msgid "Label Image DPI" +msgstr "" + +#: common/models.py:1669 +msgid "DPI resolution when generating image files to supply to label printing plugins" +msgstr "" + +#: common/models.py:1675 +msgid "Enable Reports" +msgstr "" + +#: common/models.py:1676 +msgid "Enable generation of reports" +msgstr "" + +#: common/models.py:1681 templates/stats.html:25 +msgid "Debug Mode" +msgstr "" + +#: common/models.py:1682 +msgid "Generate reports in debug mode (HTML output)" +msgstr "" + +#: common/models.py:1687 +msgid "Log Report Errors" +msgstr "" + +#: common/models.py:1688 +msgid "Log errors which occur when generating reports" +msgstr "" + +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 +msgid "Page Size" +msgstr "" + +#: common/models.py:1694 +msgid "Default page size for PDF reports" +msgstr "" + +#: common/models.py:1699 +msgid "Enable Test Reports" +msgstr "" + +#: common/models.py:1700 +msgid "Enable generation of test reports" +msgstr "" + +#: common/models.py:1705 +msgid "Attach Test Reports" +msgstr "" + +#: common/models.py:1707 +msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" +msgstr "" + +#: common/models.py:1713 +msgid "Globally Unique Serials" +msgstr "" + +#: common/models.py:1714 +msgid "Serial numbers for stock items must be globally unique" +msgstr "" + +#: common/models.py:1719 +msgid "Autofill Serial Numbers" +msgstr "" + +#: common/models.py:1720 +msgid "Autofill serial numbers in forms" +msgstr "" + +#: common/models.py:1725 +msgid "Delete Depleted Stock" +msgstr "" + +#: common/models.py:1727 +msgid "Determines default behavior when a stock item is depleted" +msgstr "" + +#: common/models.py:1733 +msgid "Batch Code Template" +msgstr "" + +#: common/models.py:1735 +msgid "Template for generating default batch codes for stock items" +msgstr "" + +#: common/models.py:1740 +msgid "Stock Expiry" +msgstr "" + +#: common/models.py:1741 +msgid "Enable stock expiry functionality" +msgstr "" + +#: common/models.py:1746 +msgid "Sell Expired Stock" +msgstr "" + +#: common/models.py:1747 +msgid "Allow sale of expired stock" +msgstr "" + +#: common/models.py:1752 +msgid "Stock Stale Time" +msgstr "" + +#: common/models.py:1754 +msgid "Number of days stock items are considered stale before expiring" +msgstr "" + +#: common/models.py:1761 +msgid "Build Expired Stock" +msgstr "" + +#: common/models.py:1762 +msgid "Allow building with expired stock" +msgstr "" + +#: common/models.py:1767 +msgid "Stock Ownership Control" +msgstr "" + +#: common/models.py:1768 +msgid "Enable ownership control over stock locations and items" +msgstr "" + +#: common/models.py:1773 +msgid "Stock Location Default Icon" +msgstr "" + +#: common/models.py:1774 +msgid "Stock location default icon (empty means no icon)" +msgstr "" + +#: common/models.py:1778 +msgid "Show Installed Stock Items" +msgstr "" + +#: common/models.py:1779 +msgid "Display installed stock items in stock tables" +msgstr "" + +#: common/models.py:1784 +msgid "Check BOM when installing items" +msgstr "" + +#: common/models.py:1786 +msgid "Installed stock items must exist in the BOM for the parent part" +msgstr "" + +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 +msgid "Build Order Reference Pattern" +msgstr "" + +#: common/models.py:1802 +msgid "Required pattern for generating Build Order reference field" +msgstr "" + +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 +msgid "Require Responsible Owner" +msgstr "" + +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 +msgid "A responsible owner must be assigned to each order" +msgstr "" + +#: common/models.py:1814 +msgid "Block Until Tests Pass" +msgstr "" + +#: common/models.py:1816 +msgid "Prevent build outputs from being completed until all required tests pass" +msgstr "" + +#: common/models.py:1822 +msgid "Enable Return Orders" +msgstr "" + +#: common/models.py:1823 +msgid "Enable return order functionality in the user interface" +msgstr "" + +#: common/models.py:1828 +msgid "Return Order Reference Pattern" +msgstr "" + +#: common/models.py:1830 +msgid "Required pattern for generating Return Order reference field" +msgstr "" + +#: common/models.py:1842 +msgid "Edit Completed Return Orders" +msgstr "" + +#: common/models.py:1844 +msgid "Allow editing of return orders after they have been completed" +msgstr "" + +#: common/models.py:1850 +msgid "Sales Order Reference Pattern" +msgstr "" + +#: common/models.py:1852 +msgid "Required pattern for generating Sales Order reference field" +msgstr "" + +#: common/models.py:1864 +msgid "Sales Order Default Shipment" +msgstr "" + +#: common/models.py:1865 +msgid "Enable creation of default shipment with sales orders" +msgstr "" + +#: common/models.py:1870 +msgid "Edit Completed Sales Orders" +msgstr "" + +#: common/models.py:1872 +msgid "Allow editing of sales orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/models.py:1888 +msgid "Required pattern for generating Purchase Order reference field" +msgstr "" + +#: common/models.py:1900 +msgid "Edit Completed Purchase Orders" +msgstr "" + +#: common/models.py:1902 +msgid "Allow editing of purchase orders after they have been shipped or completed" +msgstr "" + +#: common/models.py:1908 +msgid "Auto Complete Purchase Orders" +msgstr "" + +#: common/models.py:1910 +msgid "Automatically mark purchase orders as complete when all line items are received" +msgstr "" + +#: common/models.py:1917 +msgid "Enable password forgot" +msgstr "" + +#: common/models.py:1918 +msgid "Enable password forgot function on the login pages" +msgstr "" + +#: common/models.py:1923 +msgid "Enable registration" +msgstr "" + +#: common/models.py:1924 +msgid "Enable self-registration for users on the login pages" +msgstr "" + +#: common/models.py:1929 +msgid "Enable SSO" +msgstr "" + +#: common/models.py:1930 +msgid "Enable SSO on the login pages" +msgstr "" + +#: common/models.py:1935 +msgid "Enable SSO registration" +msgstr "" + +#: common/models.py:1937 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "" + +#: common/models.py:1943 +msgid "Email required" +msgstr "" + +#: common/models.py:1944 +msgid "Require user to supply mail on signup" +msgstr "" + +#: common/models.py:1949 +msgid "Auto-fill SSO users" +msgstr "" + +#: common/models.py:1951 +msgid "Automatically fill out user-details from SSO account-data" +msgstr "" + +#: common/models.py:1957 +msgid "Mail twice" +msgstr "" + +#: common/models.py:1958 +msgid "On signup ask users twice for their mail" +msgstr "" + +#: common/models.py:1963 +msgid "Password twice" +msgstr "" + +#: common/models.py:1964 +msgid "On signup ask users twice for their password" +msgstr "" + +#: common/models.py:1969 +msgid "Allowed domains" +msgstr "" + +#: common/models.py:1971 +msgid "Restrict signup to certain domains (comma-separated, starting with @)" +msgstr "" + +#: common/models.py:1977 +msgid "Group on signup" +msgstr "" + +#: common/models.py:1978 +msgid "Group to which new users are assigned on registration" +msgstr "" + +#: common/models.py:1983 +msgid "Enforce MFA" +msgstr "" + +#: common/models.py:1984 +msgid "Users must use multifactor security." +msgstr "" + +#: common/models.py:1989 +msgid "Check plugins on startup" +msgstr "" + +#: common/models.py:1991 +msgid "Check that all plugins are installed on startup - enable in container environments" +msgstr "" + +#: common/models.py:1999 +msgid "Check for plugin updates" +msgstr "" + +#: common/models.py:2000 +msgid "Enable periodic checks for updates to installed plugins" +msgstr "" + +#: common/models.py:2006 +msgid "Enable URL integration" +msgstr "" + +#: common/models.py:2007 +msgid "Enable plugins to add URL routes" +msgstr "" + +#: common/models.py:2013 +msgid "Enable navigation integration" +msgstr "" + +#: common/models.py:2014 +msgid "Enable plugins to integrate into navigation" +msgstr "" + +#: common/models.py:2020 +msgid "Enable app integration" +msgstr "" + +#: common/models.py:2021 +msgid "Enable plugins to add apps" +msgstr "" + +#: common/models.py:2027 +msgid "Enable schedule integration" +msgstr "" + +#: common/models.py:2028 +msgid "Enable plugins to run scheduled tasks" +msgstr "" + +#: common/models.py:2034 +msgid "Enable event integration" +msgstr "" + +#: common/models.py:2035 +msgid "Enable plugins to respond to internal events" +msgstr "" + +#: common/models.py:2041 +msgid "Enable project codes" +msgstr "" + +#: common/models.py:2042 +msgid "Enable project codes for tracking projects" +msgstr "" + +#: common/models.py:2047 +msgid "Stocktake Functionality" +msgstr "" + +#: common/models.py:2049 +msgid "Enable stocktake functionality for recording stock levels and calculating stock value" +msgstr "" + +#: common/models.py:2055 +msgid "Exclude External Locations" +msgstr "" + +#: common/models.py:2057 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" + +#: common/models.py:2063 +msgid "Automatic Stocktake Period" +msgstr "" + +#: common/models.py:2065 +msgid "Number of days between automatic stocktake recording (set to zero to disable)" +msgstr "" + +#: common/models.py:2071 +msgid "Report Deletion Interval" +msgstr "" + +#: common/models.py:2073 +msgid "Stocktake reports will be deleted after specified number of days" +msgstr "" + +#: common/models.py:2080 +msgid "Display Users full names" +msgstr "" + +#: common/models.py:2081 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/models.py:2086 +msgid "Enable Test Station Data" +msgstr "" + +#: common/models.py:2087 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/models.py:2099 common/models.py:2509 +msgid "Settings key (must be unique - case insensitive" +msgstr "" + +#: common/models.py:2142 +msgid "Hide inactive parts" +msgstr "" + +#: common/models.py:2144 +msgid "Hide inactive parts in results displayed on the homepage" +msgstr "" + +#: common/models.py:2150 +msgid "Show subscribed parts" +msgstr "" + +#: common/models.py:2151 +msgid "Show subscribed parts on the homepage" +msgstr "" + +#: common/models.py:2156 +msgid "Show subscribed categories" +msgstr "" + +#: common/models.py:2157 +msgid "Show subscribed part categories on the homepage" +msgstr "" + +#: common/models.py:2162 +msgid "Show latest parts" +msgstr "" + +#: common/models.py:2163 +msgid "Show latest parts on the homepage" +msgstr "" + +#: common/models.py:2168 +msgid "Show invalid BOMs" +msgstr "" + +#: common/models.py:2169 +msgid "Show BOMs that await validation on the homepage" +msgstr "" + +#: common/models.py:2174 +msgid "Show recent stock changes" +msgstr "" + +#: common/models.py:2175 +msgid "Show recently changed stock items on the homepage" +msgstr "" + +#: common/models.py:2180 +msgid "Show low stock" +msgstr "" + +#: common/models.py:2181 +msgid "Show low stock items on the homepage" +msgstr "" + +#: common/models.py:2186 +msgid "Show depleted stock" +msgstr "" + +#: common/models.py:2187 +msgid "Show depleted stock items on the homepage" +msgstr "" + +#: common/models.py:2192 +msgid "Show needed stock" +msgstr "" + +#: common/models.py:2193 +msgid "Show stock items needed for builds on the homepage" +msgstr "" + +#: common/models.py:2198 +msgid "Show expired stock" +msgstr "" + +#: common/models.py:2199 +msgid "Show expired stock items on the homepage" +msgstr "" + +#: common/models.py:2204 +msgid "Show stale stock" +msgstr "" + +#: common/models.py:2205 +msgid "Show stale stock items on the homepage" +msgstr "" + +#: common/models.py:2210 +msgid "Show pending builds" +msgstr "" + +#: common/models.py:2211 +msgid "Show pending builds on the homepage" +msgstr "" + +#: common/models.py:2216 +msgid "Show overdue builds" +msgstr "" + +#: common/models.py:2217 +msgid "Show overdue builds on the homepage" +msgstr "" + +#: common/models.py:2222 +msgid "Show outstanding POs" +msgstr "" + +#: common/models.py:2223 +msgid "Show outstanding POs on the homepage" +msgstr "" + +#: common/models.py:2228 +msgid "Show overdue POs" +msgstr "" + +#: common/models.py:2229 +msgid "Show overdue POs on the homepage" +msgstr "" + +#: common/models.py:2234 +msgid "Show outstanding SOs" +msgstr "" + +#: common/models.py:2235 +msgid "Show outstanding SOs on the homepage" +msgstr "" + +#: common/models.py:2240 +msgid "Show overdue SOs" +msgstr "" + +#: common/models.py:2241 +msgid "Show overdue SOs on the homepage" +msgstr "" + +#: common/models.py:2246 +msgid "Show pending SO shipments" +msgstr "" + +#: common/models.py:2247 +msgid "Show pending SO shipments on the homepage" +msgstr "" + +#: common/models.py:2252 +msgid "Show News" +msgstr "" + +#: common/models.py:2253 +msgid "Show news on the homepage" +msgstr "" + +#: common/models.py:2258 +msgid "Inline label display" +msgstr "" + +#: common/models.py:2260 +msgid "Display PDF labels in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2266 +msgid "Default label printer" +msgstr "" + +#: common/models.py:2268 +msgid "Configure which label printer should be selected by default" +msgstr "" + +#: common/models.py:2274 +msgid "Inline report display" +msgstr "" + +#: common/models.py:2276 +msgid "Display PDF reports in the browser, instead of downloading as a file" +msgstr "" + +#: common/models.py:2282 +msgid "Search Parts" +msgstr "" + +#: common/models.py:2283 +msgid "Display parts in search preview window" +msgstr "" + +#: common/models.py:2288 +msgid "Search Supplier Parts" +msgstr "" + +#: common/models.py:2289 +msgid "Display supplier parts in search preview window" +msgstr "" + +#: common/models.py:2294 +msgid "Search Manufacturer Parts" +msgstr "" + +#: common/models.py:2295 +msgid "Display manufacturer parts in search preview window" +msgstr "" + +#: common/models.py:2300 +msgid "Hide Inactive Parts" +msgstr "" + +#: common/models.py:2301 +msgid "Excluded inactive parts from search preview window" +msgstr "" + +#: common/models.py:2306 +msgid "Search Categories" +msgstr "" + +#: common/models.py:2307 +msgid "Display part categories in search preview window" +msgstr "" + +#: common/models.py:2312 +msgid "Search Stock" +msgstr "" + +#: common/models.py:2313 +msgid "Display stock items in search preview window" +msgstr "" + +#: common/models.py:2318 +msgid "Hide Unavailable Stock Items" +msgstr "" + +#: common/models.py:2320 +msgid "Exclude stock items which are not available from the search preview window" +msgstr "" + +#: common/models.py:2326 +msgid "Search Locations" +msgstr "" + +#: common/models.py:2327 +msgid "Display stock locations in search preview window" +msgstr "" + +#: common/models.py:2332 +msgid "Search Companies" +msgstr "" + +#: common/models.py:2333 +msgid "Display companies in search preview window" +msgstr "" + +#: common/models.py:2338 +msgid "Search Build Orders" +msgstr "" + +#: common/models.py:2339 +msgid "Display build orders in search preview window" +msgstr "" + +#: common/models.py:2344 +msgid "Search Purchase Orders" +msgstr "" + +#: common/models.py:2345 +msgid "Display purchase orders in search preview window" +msgstr "" + +#: common/models.py:2350 +msgid "Exclude Inactive Purchase Orders" +msgstr "" + +#: common/models.py:2352 +msgid "Exclude inactive purchase orders from search preview window" +msgstr "" + +#: common/models.py:2358 +msgid "Search Sales Orders" +msgstr "" + +#: common/models.py:2359 +msgid "Display sales orders in search preview window" +msgstr "" + +#: common/models.py:2364 +msgid "Exclude Inactive Sales Orders" +msgstr "" + +#: common/models.py:2366 +msgid "Exclude inactive sales orders from search preview window" +msgstr "" + +#: common/models.py:2372 +msgid "Search Return Orders" +msgstr "" + +#: common/models.py:2373 +msgid "Display return orders in search preview window" +msgstr "" + +#: common/models.py:2378 +msgid "Exclude Inactive Return Orders" +msgstr "" + +#: common/models.py:2380 +msgid "Exclude inactive return orders from search preview window" +msgstr "" + +#: common/models.py:2386 +msgid "Search Preview Results" +msgstr "" + +#: common/models.py:2388 +msgid "Number of results to show in each section of the search preview window" +msgstr "" + +#: common/models.py:2394 +msgid "Regex Search" +msgstr "" + +#: common/models.py:2395 +msgid "Enable regular expressions in search queries" +msgstr "" + +#: common/models.py:2400 +msgid "Whole Word Search" +msgstr "" + +#: common/models.py:2401 +msgid "Search queries return results for whole word matches" +msgstr "" + +#: common/models.py:2406 +msgid "Show Quantity in Forms" +msgstr "" + +#: common/models.py:2407 +msgid "Display available part quantity in some forms" +msgstr "" + +#: common/models.py:2412 +msgid "Escape Key Closes Forms" +msgstr "" + +#: common/models.py:2413 +msgid "Use the escape key to close modal forms" +msgstr "" + +#: common/models.py:2418 +msgid "Fixed Navbar" +msgstr "" + +#: common/models.py:2419 +msgid "The navbar position is fixed to the top of the screen" +msgstr "" + +#: common/models.py:2424 +msgid "Date Format" +msgstr "" + +#: common/models.py:2425 +msgid "Preferred format for displaying dates" +msgstr "" + +#: common/models.py:2438 part/templates/part/detail.html:41 +msgid "Part Scheduling" +msgstr "" + +#: common/models.py:2439 +msgid "Display part scheduling information" +msgstr "" + +#: common/models.py:2444 part/templates/part/detail.html:62 +msgid "Part Stocktake" +msgstr "" + +#: common/models.py:2446 +msgid "Display part stocktake information (if stocktake functionality is enabled)" +msgstr "" + +#: common/models.py:2452 +msgid "Table String Length" +msgstr "" + +#: common/models.py:2454 +msgid "Maximum length limit for strings displayed in table views" +msgstr "" + +#: common/models.py:2460 +msgid "Default part label template" +msgstr "" + +#: common/models.py:2461 +msgid "The part label template to be automatically selected" +msgstr "" + +#: common/models.py:2466 +msgid "Default stock item template" +msgstr "" + +#: common/models.py:2468 +msgid "The stock item label template to be automatically selected" +msgstr "" + +#: common/models.py:2474 +msgid "Default stock location label template" +msgstr "" + +#: common/models.py:2476 +msgid "The stock location label template to be automatically selected" +msgstr "" + +#: common/models.py:2482 +msgid "Default build line label template" +msgstr "" + +#: common/models.py:2484 +msgid "The build line label template to be automatically selected" +msgstr "" + +#: common/models.py:2490 +msgid "Receive error reports" +msgstr "" + +#: common/models.py:2491 +msgid "Receive notifications for system errors" +msgstr "" + +#: common/models.py:2496 +msgid "Last used printing machines" +msgstr "" + +#: common/models.py:2497 +msgid "Save the last used printing machines for a user" +msgstr "" + +#: common/models.py:2540 +msgid "Price break quantity" +msgstr "" + +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 +#: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 +#: templates/js/translated/pricing.js:621 +#: templates/js/translated/return_order.js:740 +msgid "Price" +msgstr "" + +#: common/models.py:2548 +msgid "Unit price at specified quantity" +msgstr "" + +#: common/models.py:2719 common/models.py:2904 +msgid "Endpoint" +msgstr "" + +#: common/models.py:2720 +msgid "Endpoint at which this webhook is received" +msgstr "" + +#: common/models.py:2730 +msgid "Name for this webhook" +msgstr "" + +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 +#: templates/js/translated/table_filters.js:135 +#: templates/js/translated/table_filters.js:219 +#: templates/js/translated/table_filters.js:492 +#: templates/js/translated/table_filters.js:520 +#: templates/js/translated/table_filters.js:716 +#: templates/js/translated/table_filters.js:796 users/models.py:182 +msgid "Active" +msgstr "" + +#: common/models.py:2734 +msgid "Is this webhook active" +msgstr "" + +#: common/models.py:2750 users/models.py:159 +msgid "Token" +msgstr "" + +#: common/models.py:2751 +msgid "Token for access" +msgstr "" + +#: common/models.py:2759 +msgid "Secret" +msgstr "" + +#: common/models.py:2760 +msgid "Shared secret for HMAC" +msgstr "" + +#: common/models.py:2868 +msgid "Message ID" +msgstr "" + +#: common/models.py:2869 +msgid "Unique identifier for this message" +msgstr "" + +#: common/models.py:2877 +msgid "Host" +msgstr "" + +#: common/models.py:2878 +msgid "Host from which this message was received" +msgstr "" + +#: common/models.py:2886 +msgid "Header" +msgstr "" + +#: common/models.py:2887 +msgid "Header of this message" +msgstr "" + +#: common/models.py:2894 +msgid "Body" +msgstr "" + +#: common/models.py:2895 +msgid "Body of this message" +msgstr "" + +#: common/models.py:2905 +msgid "Endpoint on which this message was received" +msgstr "" + +#: common/models.py:2910 +msgid "Worked on" +msgstr "" + +#: common/models.py:2911 +msgid "Was the work on this message finished?" +msgstr "" + +#: common/models.py:3037 +msgid "Id" +msgstr "" + +#: common/models.py:3039 templates/js/translated/company.js:965 +#: templates/js/translated/news.js:44 +msgid "Title" +msgstr "" + +#: common/models.py:3043 templates/js/translated/news.js:60 +msgid "Published" +msgstr "" + +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 +#: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 +msgid "Author" +msgstr "" + +#: common/models.py:3047 templates/js/translated/news.js:52 +msgid "Summary" +msgstr "" + +#: common/models.py:3050 +msgid "Read" +msgstr "" + +#: common/models.py:3050 +msgid "Was this news item read?" +msgstr "" + +#: common/models.py:3067 company/models.py:156 part/models.py:972 +#: 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 +#: stock/templates/stock/item_base.html:133 templates/503.html:31 +#: templates/hover_image.html:7 templates/hover_image.html:9 +#: templates/modals.html:6 +msgid "Image" +msgstr "" + +#: common/models.py:3067 +msgid "Image file" +msgstr "" + +#: common/models.py:3109 +msgid "Unit name must be a valid identifier" +msgstr "" + +#: common/models.py:3128 +msgid "Unit name" +msgstr "" + +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 +msgid "Symbol" +msgstr "" + +#: common/models.py:3136 +msgid "Optional unit symbol" +msgstr "" + +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 +msgid "Definition" +msgstr "" + +#: common/models.py:3144 +msgid "Unit definition" +msgstr "" + +#: common/notifications.py:314 +#, python-brace-format +msgid "New {verbose_name}" +msgstr "" + +#: common/notifications.py:316 +msgid "A new order has been created and assigned to you" +msgstr "" + +#: common/notifications.py:322 +#, python-brace-format +msgid "{verbose_name} canceled" +msgstr "" + +#: common/notifications.py:324 +msgid "A order that is assigned to you was canceled" +msgstr "" + +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 +msgid "Items Received" +msgstr "" + +#: common/notifications.py:332 +msgid "Items have been received against a purchase order" +msgstr "" + +#: common/notifications.py:339 +msgid "Items have been received against a return order" +msgstr "" + +#: common/notifications.py:457 +msgid "Error raised by plugin" +msgstr "" + +#: common/serializers.py:366 +msgid "Is Running" +msgstr "" + +#: common/serializers.py:372 +msgid "Pending Tasks" +msgstr "" + +#: common/serializers.py:378 +msgid "Scheduled Tasks" +msgstr "" + +#: common/serializers.py:384 +msgid "Failed Tasks" +msgstr "" + +#: common/serializers.py:399 +msgid "Task ID" +msgstr "" + +#: common/serializers.py:399 +msgid "Unique task ID" +msgstr "" + +#: common/serializers.py:401 +msgid "Lock" +msgstr "" + +#: common/serializers.py:401 +msgid "Lock time" +msgstr "" + +#: common/serializers.py:403 +msgid "Task name" +msgstr "" + +#: common/serializers.py:405 +msgid "Function" +msgstr "" + +#: common/serializers.py:405 +msgid "Function name" +msgstr "" + +#: common/serializers.py:407 +msgid "Arguments" +msgstr "" + +#: common/serializers.py:407 +msgid "Task arguments" +msgstr "" + +#: common/serializers.py:410 +msgid "Keyword Arguments" +msgstr "" + +#: common/serializers.py:410 +msgid "Task keyword arguments" +msgstr "" + +#: common/views.py:84 order/templates/order/order_wizard/po_upload.html:51 +#: order/templates/order/purchase_order_detail.html:24 order/views.py:118 +#: part/templates/part/import_wizard/part_upload.html:58 part/views.py:109 +#: templates/patterns/wizard/upload.html:37 +msgid "Upload File" +msgstr "" + +#: common/views.py:84 order/templates/order/order_wizard/match_fields.html:52 +#: order/views.py:119 +#: part/templates/part/import_wizard/ajax_match_fields.html:45 +#: part/templates/part/import_wizard/match_fields.html:52 part/views.py:110 +#: templates/patterns/wizard/match_fields.html:51 +msgid "Match Fields" +msgstr "" + +#: common/views.py:84 +msgid "Match Items" +msgstr "" + +#: common/views.py:401 +msgid "Fields matching failed" +msgstr "" + +#: common/views.py:464 +msgid "Parts imported" +msgstr "" + +#: common/views.py:494 order/templates/order/order_wizard/match_fields.html:27 +#: order/templates/order/order_wizard/match_parts.html:19 +#: order/templates/order/order_wizard/po_upload.html:49 +#: part/templates/part/import_wizard/match_fields.html:27 +#: part/templates/part/import_wizard/match_references.html:19 +#: part/templates/part/import_wizard/part_upload.html:56 +#: templates/patterns/wizard/match_fields.html:26 +#: templates/patterns/wizard/upload.html:35 +msgid "Previous Step" +msgstr "" + +#: company/api.py:164 +msgid "Part is Active" +msgstr "" + +#: company/api.py:168 +msgid "Manufacturer is Active" +msgstr "" + +#: company/api.py:317 +msgid "Supplier Part is Active" +msgstr "" + +#: company/api.py:321 +msgid "Internal Part is Active" +msgstr "" + +#: company/api.py:325 +msgid "Supplier is Active" +msgstr "" + +#: company/models.py:114 +msgid "Company description" +msgstr "" + +#: company/models.py:115 +msgid "Description of the company" +msgstr "" + +#: company/models.py:120 company/templates/company/company_base.html:106 +#: templates/InvenTree/settings/plugin_settings.html:54 +#: templates/js/translated/company.js:532 +msgid "Website" +msgstr "" + +#: company/models.py:120 +msgid "Company website URL" +msgstr "" + +#: company/models.py:125 +msgid "Phone number" +msgstr "" + +#: company/models.py:127 +msgid "Contact phone number" +msgstr "" + +#: company/models.py:134 +msgid "Contact email address" +msgstr "" + +#: company/models.py:139 company/templates/company/company_base.html:145 +#: order/models.py:343 order/templates/order/order_base.html:203 +#: order/templates/order/return_order_base.html:174 +#: order/templates/order/sales_order_base.html:218 +msgid "Contact" +msgstr "" + +#: company/models.py:141 +msgid "Point of contact" +msgstr "" + +#: company/models.py:147 +msgid "Link to external company information" +msgstr "" + +#: company/models.py:160 +msgid "Is this company active?" +msgstr "" + +#: company/models.py:165 +msgid "is customer" +msgstr "" + +#: company/models.py:166 +msgid "Do you sell items to this company?" +msgstr "" + +#: company/models.py:171 +msgid "is supplier" +msgstr "" + +#: company/models.py:172 +msgid "Do you purchase items from this company?" +msgstr "" + +#: company/models.py:177 +msgid "is manufacturer" +msgstr "" + +#: company/models.py:178 +msgid "Does this company manufacture parts?" +msgstr "" + +#: company/models.py:186 +msgid "Default currency used for this company" +msgstr "" + +#: company/models.py:273 company/models.py:382 +#: company/templates/company/company_base.html:8 +#: company/templates/company/company_base.html:12 stock/api.py:812 +#: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 +msgid "Company" +msgstr "" + +#: company/models.py:383 +msgid "Select company" +msgstr "" + +#: company/models.py:388 +msgid "Address title" +msgstr "" + +#: company/models.py:389 +msgid "Title describing the address entry" +msgstr "" + +#: company/models.py:395 +msgid "Primary address" +msgstr "" + +#: company/models.py:396 +msgid "Set as primary address" +msgstr "" + +#: company/models.py:401 templates/js/translated/company.js:914 +#: templates/js/translated/company.js:971 +msgid "Line 1" +msgstr "" + +#: company/models.py:402 +msgid "Address line 1" +msgstr "" + +#: company/models.py:408 templates/js/translated/company.js:915 +#: templates/js/translated/company.js:977 +msgid "Line 2" +msgstr "" + +#: company/models.py:409 +msgid "Address line 2" +msgstr "" + +#: company/models.py:415 company/models.py:416 +#: templates/js/translated/company.js:983 +msgid "Postal code" +msgstr "" + +#: company/models.py:422 +msgid "City/Region" +msgstr "" + +#: company/models.py:423 +msgid "Postal code city/region" +msgstr "" + +#: company/models.py:429 +msgid "State/Province" +msgstr "" + +#: company/models.py:430 +msgid "State or province" +msgstr "" + +#: company/models.py:436 templates/js/translated/company.js:1001 +msgid "Country" +msgstr "" + +#: company/models.py:437 +msgid "Address country" +msgstr "" + +#: company/models.py:443 +msgid "Courier shipping notes" +msgstr "" + +#: company/models.py:444 +msgid "Notes for shipping courier" +msgstr "" + +#: company/models.py:450 +msgid "Internal shipping notes" +msgstr "" + +#: company/models.py:451 +msgid "Shipping notes for internal use" +msgstr "" + +#: company/models.py:458 +msgid "Link to address information (external)" +msgstr "" + +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 +#: templates/js/translated/bom.js:622 +msgid "Base Part" +msgstr "" + +#: company/models.py:491 company/models.py:794 +msgid "Select part" +msgstr "" + +#: company/models.py:500 company/templates/company/company_base.html:82 +#: company/templates/company/manufacturer_part.html:90 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 +#: stock/templates/stock/item_base.html:207 +#: templates/js/translated/company.js:507 +#: templates/js/translated/company.js:1118 +#: templates/js/translated/company.js:1296 +#: templates/js/translated/company.js:1611 +#: templates/js/translated/table_filters.js:800 +msgid "Manufacturer" +msgstr "" + +#: company/models.py:501 +msgid "Select manufacturer" +msgstr "" + +#: company/models.py:507 company/templates/company/manufacturer_part.html:101 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 +#: templates/js/translated/company.js:351 +#: templates/js/translated/company.js:1117 +#: templates/js/translated/company.js:1312 +#: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 +msgid "MPN" +msgstr "" + +#: company/models.py:508 +msgid "Manufacturer Part Number" +msgstr "" + +#: company/models.py:515 +msgid "URL for external manufacturer part link" +msgstr "" + +#: company/models.py:524 +msgid "Manufacturer part description" +msgstr "" + +#: company/models.py:581 company/models.py:608 company/models.py:824 +#: company/templates/company/manufacturer_part.html:7 +#: company/templates/company/manufacturer_part.html:24 +#: stock/templates/stock/item_base.html:217 +msgid "Manufacturer Part" +msgstr "" + +#: company/models.py:615 +msgid "Parameter name" +msgstr "" + +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 +#: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 +#: templates/js/translated/stock.js:1522 +msgid "Value" +msgstr "" + +#: company/models.py:622 +msgid "Parameter value" +msgstr "" + +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 +#: part/templates/part/part_base.html:284 +#: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 +msgid "Units" +msgstr "" + +#: company/models.py:630 +msgid "Parameter units" +msgstr "" + +#: company/models.py:732 +msgid "Pack units must be compatible with the base part units" +msgstr "" + +#: company/models.py:739 +msgid "Pack units must be greater than zero" +msgstr "" + +#: company/models.py:753 +msgid "Linked manufacturer part must reference the same base part" +msgstr "" + +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 +#: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 +#: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 +#: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 +#: templates/email/overdue_purchase_order.html:16 +#: templates/js/translated/company.js:350 +#: templates/js/translated/company.js:511 +#: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 +#: templates/js/translated/pricing.js:498 +#: templates/js/translated/purchase_order.js:1689 +#: templates/js/translated/table_filters.js:804 +msgid "Supplier" +msgstr "" + +#: company/models.py:803 +msgid "Select supplier" +msgstr "" + +#: company/models.py:809 part/serializers.py:525 +msgid "Supplier stock keeping unit" +msgstr "" + +#: company/models.py:815 +msgid "Is this supplier part active?" +msgstr "" + +#: company/models.py:825 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:832 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:841 +msgid "Supplier part description" +msgstr "" + +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 +#: report/templates/report/inventree_bill_of_materials_report.html:140 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 +msgid "Note" +msgstr "" + +#: company/models.py:857 part/models.py:2010 +msgid "base cost" +msgstr "" + +#: company/models.py:858 part/models.py:2011 +msgid "Minimum charge (e.g. stocking fee)" +msgstr "" + +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 +#: stock/templates/stock/item_base.html:240 +#: templates/js/translated/company.js:1646 +#: templates/js/translated/stock.js:2424 +msgid "Packaging" +msgstr "" + +#: company/models.py:866 +msgid "Part packaging" +msgstr "" + +#: company/models.py:871 templates/js/translated/company.js:1651 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:311 +#: templates/js/translated/purchase_order.js:841 +#: templates/js/translated/purchase_order.js:1103 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 +msgid "Pack Quantity" +msgstr "" + +#: company/models.py:873 +msgid "Total quantity supplied in a single pack. Leave empty for single items." +msgstr "" + +#: company/models.py:892 part/models.py:2017 +msgid "multiple" +msgstr "" + +#: company/models.py:893 +msgid "Order multiple" +msgstr "" + +#: company/models.py:905 +msgid "Quantity available from supplier" +msgstr "" + +#: company/models.py:911 +msgid "Availability Updated" +msgstr "" + +#: company/models.py:912 +msgid "Date of last update of availability data" +msgstr "" + +#: company/serializers.py:163 +msgid "Default currency used for this supplier" +msgstr "" + +#: company/serializers.py:381 part/admin.py:126 +#: part/templates/part/part_base.html:197 +#: templates/js/translated/company.js:1689 +#: templates/js/translated/table_filters.js:355 +msgid "In Stock" +msgstr "" + +#: company/templates/company/company_base.html:16 +#: part/templates/part/part_base.html:146 +#: templates/js/translated/company.js:1287 +#: templates/js/translated/company.js:1575 +#: templates/js/translated/model_renderers.js:312 +#: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 +msgid "Inactive" +msgstr "" + +#: company/templates/company/company_base.html:27 +#: templates/js/translated/purchase_order.js:242 +msgid "Create Purchase Order" +msgstr "" + +#: company/templates/company/company_base.html:33 +msgid "Company actions" +msgstr "" + +#: company/templates/company/company_base.html:38 +msgid "Edit company information" +msgstr "" + +#: company/templates/company/company_base.html:39 +#: templates/js/translated/company.js:445 +msgid "Edit Company" +msgstr "" + +#: company/templates/company/company_base.html:43 +msgid "Delete company" +msgstr "" + +#: company/templates/company/company_base.html:44 +#: company/templates/company/company_base.html:168 +msgid "Delete Company" +msgstr "" + +#: company/templates/company/company_base.html:53 +#: company/templates/company/manufacturer_part.html:51 +#: company/templates/company/supplier_part.html:83 +#: part/templates/part/part_thumb.html:20 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 +msgid "Part image" +msgstr "" + +#: company/templates/company/company_base.html:61 +#: part/templates/part/part_thumb.html:12 +msgid "Upload new image" +msgstr "" + +#: company/templates/company/company_base.html:64 +#: part/templates/part/part_thumb.html:14 +msgid "Download image from URL" +msgstr "" + +#: company/templates/company/company_base.html:66 +#: part/templates/part/part_thumb.html:16 +msgid "Delete image" +msgstr "" + +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 +#: stock/templates/stock/item_base.html:405 +#: templates/email/overdue_sales_order.html:16 +#: templates/js/translated/company.js:503 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 +#: templates/js/translated/stock.js:2959 +#: templates/js/translated/table_filters.js:808 +msgid "Customer" +msgstr "" + +#: company/templates/company/company_base.html:117 +msgid "Uses default currency" +msgstr "" + +#: company/templates/company/company_base.html:124 order/models.py:353 +#: order/templates/order/order_base.html:210 +#: order/templates/order/return_order_base.html:181 +#: order/templates/order/sales_order_base.html:225 +msgid "Address" +msgstr "" + +#: company/templates/company/company_base.html:131 +msgid "Phone" +msgstr "" + +#: company/templates/company/company_base.html:211 +#: part/templates/part/part_base.html:527 +msgid "Remove Image" +msgstr "" + +#: company/templates/company/company_base.html:212 +msgid "Remove associated image from this company" +msgstr "" + +#: company/templates/company/company_base.html:214 +#: part/templates/part/part_base.html:530 +#: templates/InvenTree/settings/user.html:88 +#: templates/InvenTree/settings/user_sso.html:43 +msgid "Remove" +msgstr "" + +#: company/templates/company/company_base.html:243 +#: part/templates/part/part_base.html:559 +msgid "Upload Image" +msgstr "" + +#: company/templates/company/company_base.html:258 +#: part/templates/part/part_base.html:613 +msgid "Download Image" +msgstr "" + +#: company/templates/company/detail.html:15 +#: company/templates/company/manufacturer_part_sidebar.html:7 +#: templates/InvenTree/search.html:120 templates/js/translated/search.js:147 +msgid "Supplier Parts" +msgstr "" + +#: company/templates/company/detail.html:19 +msgid "Create new supplier part" +msgstr "" + +#: company/templates/company/detail.html:20 +#: company/templates/company/manufacturer_part.html:123 +#: part/templates/part/detail.html:356 +msgid "New Supplier Part" +msgstr "" + +#: company/templates/company/detail.html:41 templates/InvenTree/search.html:105 +#: templates/js/translated/search.js:151 +msgid "Manufacturer Parts" +msgstr "" + +#: company/templates/company/detail.html:45 +msgid "Create new manufacturer part" +msgstr "" + +#: company/templates/company/detail.html:46 part/templates/part/detail.html:376 +msgid "New Manufacturer Part" +msgstr "" + +#: company/templates/company/detail.html:65 +msgid "Supplier Stock" +msgstr "" + +#: company/templates/company/detail.html:75 +#: company/templates/company/sidebar.html:12 +#: company/templates/company/supplier_part_sidebar.html:7 +#: order/templates/order/order_base.html:13 +#: order/templates/order/purchase_orders.html:8 +#: order/templates/order/purchase_orders.html:12 +#: part/templates/part/detail.html:106 part/templates/part/part_sidebar.html:35 +#: templates/InvenTree/index.html:227 templates/InvenTree/search.html:199 +#: templates/InvenTree/settings/sidebar.html:57 +#: templates/js/translated/search.js:205 templates/navbar.html:50 +#: users/models.py:208 +msgid "Purchase Orders" +msgstr "" + +#: company/templates/company/detail.html:79 +#: order/templates/order/purchase_orders.html:17 +msgid "Create new purchase order" +msgstr "" + +#: company/templates/company/detail.html:80 +#: order/templates/order/purchase_orders.html:18 +msgid "New Purchase Order" +msgstr "" + +#: company/templates/company/detail.html:101 +#: company/templates/company/sidebar.html:21 +#: order/templates/order/sales_order_base.html:13 +#: order/templates/order/sales_orders.html:8 +#: order/templates/order/sales_orders.html:15 +#: part/templates/part/detail.html:127 part/templates/part/part_sidebar.html:39 +#: templates/InvenTree/index.html:259 templates/InvenTree/search.html:219 +#: templates/InvenTree/settings/sidebar.html:59 +#: templates/js/translated/search.js:219 templates/navbar.html:62 +#: users/models.py:209 +msgid "Sales Orders" +msgstr "" + +#: company/templates/company/detail.html:105 +#: order/templates/order/sales_orders.html:20 +msgid "Create new sales order" +msgstr "" + +#: company/templates/company/detail.html:106 +#: order/templates/order/sales_orders.html:21 +msgid "New Sales Order" +msgstr "" + +#: company/templates/company/detail.html:126 +msgid "Assigned Stock" +msgstr "" + +#: company/templates/company/detail.html:142 +#: company/templates/company/sidebar.html:29 +#: order/templates/order/return_order_base.html:13 +#: order/templates/order/return_orders.html:8 +#: order/templates/order/return_orders.html:15 +#: templates/InvenTree/settings/sidebar.html:61 +#: templates/js/translated/search.js:232 templates/navbar.html:65 +#: users/models.py:210 +msgid "Return Orders" +msgstr "" + +#: company/templates/company/detail.html:146 +#: order/templates/order/return_orders.html:20 +msgid "Create new return order" +msgstr "" + +#: company/templates/company/detail.html:147 +#: order/templates/order/return_orders.html:21 +msgid "New Return Order" +msgstr "" + +#: company/templates/company/detail.html:168 +msgid "Company Notes" +msgstr "" + +#: company/templates/company/detail.html:183 +msgid "Company Contacts" +msgstr "" + +#: company/templates/company/detail.html:187 +#: company/templates/company/detail.html:188 +msgid "Add Contact" +msgstr "" + +#: company/templates/company/detail.html:206 +msgid "Company addresses" +msgstr "" + +#: company/templates/company/detail.html:210 +#: company/templates/company/detail.html:211 +msgid "Add Address" +msgstr "" + +#: company/templates/company/manufacturer_part.html:15 company/views.py:37 +#: templates/InvenTree/search.html:180 templates/navbar.html:49 +msgid "Manufacturers" +msgstr "" + +#: company/templates/company/manufacturer_part.html:35 +#: company/templates/company/supplier_part.html:227 +#: part/templates/part/detail.html:109 part/templates/part/part_base.html:83 +msgid "Order part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:39 +#: templates/js/translated/company.js:1343 +msgid "Edit manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:43 +#: templates/js/translated/company.js:1344 +msgid "Delete manufacturer part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:65 +#: company/templates/company/supplier_part.html:97 order/api.py:458 +msgid "Internal Part" +msgstr "" + +#: company/templates/company/manufacturer_part.html:95 +msgid "No manufacturer information available" +msgstr "" + +#: company/templates/company/manufacturer_part.html:119 +#: company/templates/company/supplier_part.html:15 company/views.py:31 +#: part/admin.py:122 part/serializers.py:836 +#: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 +#: templates/navbar.html:48 +msgid "Suppliers" +msgstr "" + +#: company/templates/company/manufacturer_part.html:156 +#: company/templates/company/manufacturer_part_sidebar.html:5 +#: part/templates/part/category_sidebar.html:20 +#: part/templates/part/detail.html:195 part/templates/part/part_sidebar.html:8 +msgid "Parameters" +msgstr "" + +#: company/templates/company/manufacturer_part.html:160 +#: part/templates/part/detail.html:200 +#: templates/InvenTree/settings/category.html:12 +#: templates/InvenTree/settings/part_parameters.html:24 +msgid "New Parameter" +msgstr "" + +#: company/templates/company/manufacturer_part.html:206 +#: templates/js/translated/part.js:1422 +msgid "Add Parameter" +msgstr "" + +#: company/templates/company/sidebar.html:6 +msgid "Manufactured Parts" +msgstr "" + +#: company/templates/company/sidebar.html:10 +msgid "Supplied Parts" +msgstr "" + +#: company/templates/company/sidebar.html:16 +msgid "Supplied Stock Items" +msgstr "" + +#: company/templates/company/sidebar.html:25 +msgid "Assigned Stock Items" +msgstr "" + +#: company/templates/company/sidebar.html:33 +msgid "Contacts" +msgstr "" + +#: company/templates/company/sidebar.html:35 +msgid "Addresses" +msgstr "" + +#: company/templates/company/supplier_part.html:7 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 +#: templates/js/translated/company.js:1600 +#: templates/js/translated/purchase_order.js:752 +#: templates/js/translated/stock.js:2280 +msgid "Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:50 +#: templates/js/translated/company.js:1526 +msgid "Supplier part actions" +msgstr "" + +#: company/templates/company/supplier_part.html:55 +#: company/templates/company/supplier_part.html:56 +#: company/templates/company/supplier_part.html:228 +#: part/templates/part/detail.html:110 +msgid "Order Part" +msgstr "" + +#: company/templates/company/supplier_part.html:60 +#: company/templates/company/supplier_part.html:61 +msgid "Update Availability" +msgstr "" + +#: company/templates/company/supplier_part.html:63 +#: company/templates/company/supplier_part.html:64 +#: templates/js/translated/company.js:294 +msgid "Edit Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:68 +#: company/templates/company/supplier_part.html:69 +#: templates/js/translated/company.js:269 +msgid "Duplicate Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:73 +msgid "Delete Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:74 +msgid "Delete Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:133 +msgid "No supplier information available" +msgstr "" + +#: company/templates/company/supplier_part.html:139 part/bom.py:279 +#: part/bom.py:311 part/serializers.py:524 +#: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 +#: templates/js/translated/pricing.js:510 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 +msgid "SKU" +msgstr "" + +#: company/templates/company/supplier_part.html:206 +msgid "Supplier Part Stock" +msgstr "" + +#: company/templates/company/supplier_part.html:209 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 +msgid "Create new stock item" +msgstr "" + +#: company/templates/company/supplier_part.html:210 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 +#: templates/js/translated/stock.js:537 +msgid "New Stock Item" +msgstr "" + +#: company/templates/company/supplier_part.html:223 +msgid "Supplier Part Orders" +msgstr "" + +#: company/templates/company/supplier_part.html:246 +msgid "Pricing Information" +msgstr "" + +#: company/templates/company/supplier_part.html:251 +#: templates/js/translated/company.js:398 +#: templates/js/translated/pricing.js:684 +msgid "Add Price Break" +msgstr "" + +#: company/templates/company/supplier_part.html:276 +msgid "Supplier Part QR Code" +msgstr "" + +#: company/templates/company/supplier_part.html:287 +msgid "Link Barcode to Supplier Part" +msgstr "" + +#: company/templates/company/supplier_part.html:359 +msgid "Update Part Availability" +msgstr "" + +#: company/templates/company/supplier_part_sidebar.html:5 +#: part/serializers.py:835 part/stocktake.py:223 +#: part/templates/part/category.html:183 +#: part/templates/part/category_sidebar.html:17 stock/admin.py:69 +#: stock/serializers.py:916 stock/serializers.py:1080 +#: stock/templates/stock/location.html:170 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 +#: stock/templates/stock/location_sidebar.html:7 +#: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 +#: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 +#: users/models.py:206 +msgid "Stock Items" +msgstr "" + +#: company/templates/company/supplier_part_sidebar.html:9 +msgid "Supplier Part Pricing" +msgstr "" + +#: company/views.py:32 +msgid "New Supplier" +msgstr "" + +#: company/views.py:38 +msgid "New Manufacturer" +msgstr "" + +#: company/views.py:43 templates/InvenTree/search.html:210 +#: templates/navbar.html:60 +msgid "Customers" +msgstr "" + +#: company/views.py:44 +msgid "New Customer" +msgstr "" + +#: company/views.py:51 templates/js/translated/search.js:192 +msgid "Companies" +msgstr "" + +#: company/views.py:52 +msgid "New Company" +msgstr "" + +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "" + +#: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 +msgid "Number of copies to print for each label" +msgstr "" + +#: machine/machine_types/label_printer.py:234 +msgid "Connected" +msgstr "" + +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 +msgid "Unknown" +msgstr "" + +#: machine/machine_types/label_printer.py:236 +msgid "Printing" +msgstr "" + +#: machine/machine_types/label_printer.py:237 +msgid "No media" +msgstr "" + +#: machine/machine_types/label_printer.py:238 +msgid "Disconnected" +msgstr "" + +#: machine/machine_types/label_printer.py:245 +msgid "Label Printer" +msgstr "" + +#: machine/machine_types/label_printer.py:246 +msgid "Directly print labels for various items." +msgstr "" + +#: machine/machine_types/label_printer.py:252 +msgid "Printer Location" +msgstr "" + +#: machine/machine_types/label_printer.py:253 +msgid "Scope the printer to a specific location" +msgstr "" + +#: machine/models.py:25 +msgid "Name of machine" +msgstr "" + +#: machine/models.py:29 +msgid "Machine Type" +msgstr "" + +#: machine/models.py:29 +msgid "Type of machine" +msgstr "" + +#: machine/models.py:34 machine/models.py:146 +msgid "Driver" +msgstr "" + +#: machine/models.py:35 +msgid "Driver used for the machine" +msgstr "" + +#: machine/models.py:39 +msgid "Machines can be disabled" +msgstr "" + +#: machine/models.py:95 +msgid "Driver available" +msgstr "" + +#: machine/models.py:100 +msgid "No errors" +msgstr "" + +#: machine/models.py:105 +msgid "Initialized" +msgstr "" + +#: machine/models.py:110 +msgid "Errors" +msgstr "" + +#: machine/models.py:117 +msgid "Machine status" +msgstr "" + +#: machine/models.py:145 +msgid "Machine" +msgstr "" + +#: machine/models.py:151 +msgid "Machine Config" +msgstr "" + +#: machine/models.py:156 +msgid "Config type" +msgstr "" + +#: order/admin.py:30 order/models.py:89 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 +#: templates/js/translated/order.js:327 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 +msgid "Total Price" +msgstr "" + +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 +#: order/templates/order/return_order_base.html:113 +#: order/templates/order/sales_order_base.html:122 +msgid "Order Status" +msgstr "" + +#: order/api.py:165 templates/js/translated/table_filters.js:194 +#: templates/js/translated/table_filters.js:779 +msgid "Has Pricing" +msgstr "" + +#: order/api.py:240 +msgid "No matching purchase order found" +msgstr "" + +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 +msgid "Order" +msgstr "" + +#: order/api.py:441 order/api.py:838 +msgid "Order Complete" +msgstr "" + +#: order/api.py:462 +msgid "Order Pending" +msgstr "" + +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 +#: order/templates/order/order_base.html:18 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 +#: templates/email/overdue_purchase_order.html:15 +#: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 +#: templates/js/translated/purchase_order.js:168 +#: templates/js/translated/purchase_order.js:753 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 +msgid "Purchase Order" +msgstr "" + +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 +#: order/templates/order/return_order_base.html:28 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 +#: templates/js/translated/stock.js:2941 +msgid "Return Order" +msgstr "" + +#: order/models.py:90 +msgid "Total price for this order" +msgstr "" + +#: order/models.py:95 order/serializers.py:71 +msgid "Order Currency" +msgstr "" + +#: order/models.py:98 order/serializers.py:72 +msgid "Currency for this order (leave blank to use company default)" +msgstr "" + +#: order/models.py:247 +msgid "Contact does not match selected company" +msgstr "" + +#: order/models.py:290 +msgid "Order description (optional)" +msgstr "" + +#: order/models.py:299 +msgid "Select project code for this order" +msgstr "" + +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +msgid "Link to external page" +msgstr "" + +#: order/models.py:311 +msgid "Expected date for order delivery. Order will be overdue after this date." +msgstr "" + +#: order/models.py:325 +msgid "Created By" +msgstr "" + +#: order/models.py:333 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:344 +msgid "Point of contact for this order" +msgstr "" + +#: order/models.py:354 +msgid "Company address for this order" +msgstr "" + +#: order/models.py:464 order/models.py:929 +msgid "Order reference" +msgstr "" + +#: order/models.py:472 order/models.py:953 +msgid "Purchase order status" +msgstr "" + +#: order/models.py:487 +msgid "Company from which the items are being ordered" +msgstr "" + +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 +msgid "Supplier Reference" +msgstr "" + +#: order/models.py:499 +msgid "Supplier order reference code" +msgstr "" + +#: order/models.py:508 +msgid "received by" +msgstr "" + +#: order/models.py:514 order/models.py:2094 +msgid "Issue Date" +msgstr "" + +#: order/models.py:515 order/models.py:2095 +msgid "Date order was issued" +msgstr "" + +#: order/models.py:522 order/models.py:2102 +msgid "Date order was completed" +msgstr "" + +#: order/models.py:566 +msgid "Part supplier must match PO supplier" +msgstr "" + +#: order/models.py:760 +msgid "Quantity must be a positive number" +msgstr "" + +#: order/models.py:941 +msgid "Company to which the items are being sold" +msgstr "" + +#: order/models.py:964 order/models.py:2087 +msgid "Customer Reference " +msgstr "" + +#: order/models.py:965 order/models.py:2088 +msgid "Customer order reference code" +msgstr "" + +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 +msgid "Shipment Date" +msgstr "" + +#: order/models.py:978 +msgid "shipped by" +msgstr "" + +#: order/models.py:1027 +msgid "Order is already complete" +msgstr "" + +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 +msgid "Only an open order can be marked as complete" +msgstr "" + +#: order/models.py:1038 +msgid "Order cannot be completed as there are incomplete shipments" +msgstr "" + +#: order/models.py:1043 +msgid "Order cannot be completed as there are incomplete line items" +msgstr "" + +#: order/models.py:1309 +msgid "Item quantity" +msgstr "" + +#: order/models.py:1326 +msgid "Line item reference" +msgstr "" + +#: order/models.py:1333 +msgid "Line item notes" +msgstr "" + +#: order/models.py:1345 +msgid "Target date for this line item (leave blank to use the target date from the order)" +msgstr "" + +#: order/models.py:1366 +msgid "Line item description (optional)" +msgstr "" + +#: order/models.py:1372 +msgid "Context" +msgstr "" + +#: order/models.py:1373 +msgid "Additional context for this line" +msgstr "" + +#: order/models.py:1383 +msgid "Unit price" +msgstr "" + +#: order/models.py:1416 +msgid "Supplier part must match supplier" +msgstr "" + +#: order/models.py:1423 +msgid "deleted" +msgstr "" + +#: order/models.py:1451 +msgid "Supplier part" +msgstr "" + +#: order/models.py:1458 order/templates/order/order_base.html:196 +#: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 +#: templates/js/translated/purchase_order.js:1306 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 +#: templates/js/translated/table_filters.js:120 +#: templates/js/translated/table_filters.js:602 +msgid "Received" +msgstr "" + +#: order/models.py:1459 +msgid "Number of items received" +msgstr "" + +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 +#: stock/templates/stock/item_base.html:183 +#: templates/js/translated/stock.js:2311 +msgid "Purchase Price" +msgstr "" + +#: order/models.py:1468 +msgid "Unit purchase price" +msgstr "" + +#: order/models.py:1483 +msgid "Where does the Purchaser want this item to be stored?" +msgstr "" + +#: order/models.py:1574 +msgid "Virtual part cannot be assigned to a sales order" +msgstr "" + +#: order/models.py:1579 +msgid "Only salable parts can be assigned to a sales order" +msgstr "" + +#: order/models.py:1605 part/templates/part/part_pricing.html:107 +#: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 +msgid "Sale Price" +msgstr "" + +#: order/models.py:1606 +msgid "Unit sale price" +msgstr "" + +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 +msgid "Shipped quantity" +msgstr "" + +#: order/models.py:1708 +msgid "Date of shipment" +msgstr "" + +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 +msgid "Delivery Date" +msgstr "" + +#: order/models.py:1715 +msgid "Date of delivery of shipment" +msgstr "" + +#: order/models.py:1723 +msgid "Checked By" +msgstr "" + +#: order/models.py:1724 +msgid "User who checked this shipment" +msgstr "" + +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 +msgid "Shipment" +msgstr "" + +#: order/models.py:1732 +msgid "Shipment number" +msgstr "" + +#: order/models.py:1740 +msgid "Tracking Number" +msgstr "" + +#: order/models.py:1741 +msgid "Shipment tracking information" +msgstr "" + +#: order/models.py:1748 +msgid "Invoice Number" +msgstr "" + +#: order/models.py:1749 +msgid "Reference number for associated invoice" +msgstr "" + +#: order/models.py:1769 +msgid "Shipment has already been sent" +msgstr "" + +#: order/models.py:1772 +msgid "Shipment has no allocated stock items" +msgstr "" + +#: order/models.py:1890 order/models.py:1892 +msgid "Stock item has not been assigned" +msgstr "" + +#: order/models.py:1899 +msgid "Cannot allocate stock item to a line with a different part" +msgstr "" + +#: order/models.py:1902 +msgid "Cannot allocate stock to a line without a part" +msgstr "" + +#: order/models.py:1905 +msgid "Allocation quantity cannot exceed stock quantity" +msgstr "" + +#: order/models.py:1924 order/serializers.py:1231 +msgid "Quantity must be 1 for serialized stock item" +msgstr "" + +#: order/models.py:1927 +msgid "Sales order does not match shipment" +msgstr "" + +#: order/models.py:1928 plugin/base/barcodes/api.py:481 +msgid "Shipment does not match sales order" +msgstr "" + +#: order/models.py:1936 +msgid "Line" +msgstr "" + +#: order/models.py:1945 +msgid "Sales order shipment reference" +msgstr "" + +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 +msgid "Item" +msgstr "" + +#: order/models.py:1959 +msgid "Select stock item to allocate" +msgstr "" + +#: order/models.py:1968 +msgid "Enter stock allocation quantity" +msgstr "" + +#: order/models.py:2057 +msgid "Return Order reference" +msgstr "" + +#: order/models.py:2069 +msgid "Company from which items are being returned" +msgstr "" + +#: order/models.py:2081 +msgid "Return order status" +msgstr "" + +#: order/models.py:2260 +msgid "Only serialized items can be assigned to a Return Order" +msgstr "" + +#: order/models.py:2276 +msgid "Select item to return from customer" +msgstr "" + +#: order/models.py:2282 +msgid "Received Date" +msgstr "" + +#: order/models.py:2283 +msgid "The date this this return item was received" +msgstr "" + +#: order/models.py:2294 templates/js/translated/return_order.js:732 +#: templates/js/translated/table_filters.js:123 +msgid "Outcome" +msgstr "" + +#: order/models.py:2295 +msgid "Outcome for this line item" +msgstr "" + +#: order/models.py:2302 +msgid "Cost associated with return or repair for this line item" +msgstr "" + +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 +msgid "Order cannot be cancelled" +msgstr "" + +#: order/serializers.py:302 order/serializers.py:1247 +msgid "Allow order to be closed with incomplete line items" +msgstr "" + +#: order/serializers.py:312 order/serializers.py:1257 +msgid "Order has incomplete line items" +msgstr "" + +#: order/serializers.py:440 +msgid "Order is not open" +msgstr "" + +#: order/serializers.py:461 +msgid "Auto Pricing" +msgstr "" + +#: order/serializers.py:463 +msgid "Automatically calculate purchase price based on supplier part data" +msgstr "" + +#: order/serializers.py:473 +msgid "Purchase price currency" +msgstr "" + +#: order/serializers.py:479 +msgid "Merge Items" +msgstr "" + +#: order/serializers.py:481 +msgid "Merge items with the same part, destination and target date into one line item" +msgstr "" + +#: order/serializers.py:499 +msgid "Supplier part must be specified" +msgstr "" + +#: order/serializers.py:502 +msgid "Purchase order must be specified" +msgstr "" + +#: order/serializers.py:510 +msgid "Supplier must match purchase order" +msgstr "" + +#: order/serializers.py:511 +msgid "Purchase order must match supplier" +msgstr "" + +#: order/serializers.py:550 order/serializers.py:1325 +msgid "Line Item" +msgstr "" + +#: order/serializers.py:556 +msgid "Line item does not match purchase order" +msgstr "" + +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 +msgid "Select destination location for received items" +msgstr "" + +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 +msgid "Enter batch code for incoming stock items" +msgstr "" + +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 +msgid "Enter serial numbers for incoming stock items" +msgstr "" + +#: order/serializers.py:601 templates/js/translated/barcode.js:52 +msgid "Barcode" +msgstr "" + +#: order/serializers.py:602 +msgid "Scanned barcode" +msgstr "" + +#: order/serializers.py:618 +msgid "Barcode is already in use" +msgstr "" + +#: order/serializers.py:642 +msgid "An integer quantity must be provided for trackable parts" +msgstr "" + +#: order/serializers.py:690 order/serializers.py:1696 +msgid "Line items must be provided" +msgstr "" + +#: order/serializers.py:706 +msgid "Destination location must be specified" +msgstr "" + +#: order/serializers.py:717 +msgid "Supplied barcode values must be unique" +msgstr "" + +#: order/serializers.py:1074 +msgid "Sale price currency" +msgstr "" + +#: order/serializers.py:1134 +msgid "No shipment details provided" +msgstr "" + +#: order/serializers.py:1195 order/serializers.py:1334 +msgid "Line item is not associated with this order" +msgstr "" + +#: order/serializers.py:1214 +msgid "Quantity must be positive" +msgstr "" + +#: order/serializers.py:1344 +msgid "Enter serial numbers to allocate" +msgstr "" + +#: order/serializers.py:1366 order/serializers.py:1472 +msgid "Shipment has already been shipped" +msgstr "" + +#: order/serializers.py:1369 order/serializers.py:1475 +msgid "Shipment is not associated with this order" +msgstr "" + +#: order/serializers.py:1416 +msgid "No match found for the following serial numbers" +msgstr "" + +#: order/serializers.py:1423 +msgid "The following serial numbers are already allocated" +msgstr "" + +#: order/serializers.py:1650 +msgid "Return order line item" +msgstr "" + +#: order/serializers.py:1656 +msgid "Line item does not match return order" +msgstr "" + +#: order/serializers.py:1659 +msgid "Line item has already been received" +msgstr "" + +#: order/serializers.py:1688 +msgid "Items can only be received against orders which are in progress" +msgstr "" + +#: order/serializers.py:1766 +msgid "Line price currency" +msgstr "" + +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + +#: order/tasks.py:25 +msgid "Overdue Purchase Order" +msgstr "" + +#: order/tasks.py:30 +#, python-brace-format +msgid "Purchase order {po} is now overdue" +msgstr "" + +#: order/tasks.py:75 +msgid "Overdue Sales Order" +msgstr "" + +#: order/tasks.py:80 +#, python-brace-format +msgid "Sales order {so} is now overdue" +msgstr "" + +#: order/templates/order/order_base.html:51 +msgid "Print purchase order report" +msgstr "" + +#: order/templates/order/order_base.html:53 +#: order/templates/order/return_order_base.html:62 +#: order/templates/order/sales_order_base.html:62 +msgid "Export order to file" +msgstr "" + +#: order/templates/order/order_base.html:59 +#: order/templates/order/return_order_base.html:72 +#: order/templates/order/sales_order_base.html:71 +msgid "Order actions" +msgstr "" + +#: order/templates/order/order_base.html:64 +#: order/templates/order/return_order_base.html:76 +#: order/templates/order/sales_order_base.html:75 +msgid "Edit order" +msgstr "" + +#: order/templates/order/order_base.html:68 +#: order/templates/order/return_order_base.html:78 +#: order/templates/order/sales_order_base.html:77 +msgid "Cancel order" +msgstr "" + +#: order/templates/order/order_base.html:73 +msgid "Duplicate order" +msgstr "" + +#: order/templates/order/order_base.html:79 +#: order/templates/order/order_base.html:80 +#: order/templates/order/return_order_base.html:82 +#: order/templates/order/return_order_base.html:83 +#: order/templates/order/sales_order_base.html:83 +#: order/templates/order/sales_order_base.html:84 +msgid "Issue Order" +msgstr "" + +#: order/templates/order/order_base.html:83 +#: order/templates/order/return_order_base.html:86 +msgid "Mark order as complete" +msgstr "" + +#: order/templates/order/order_base.html:84 +#: order/templates/order/return_order_base.html:87 +#: order/templates/order/sales_order_base.html:97 +msgid "Complete Order" +msgstr "" + +#: order/templates/order/order_base.html:91 +msgid "Supplier part thumbnail" +msgstr "" + +#: order/templates/order/order_base.html:106 +#: order/templates/order/return_order_base.html:101 +#: order/templates/order/sales_order_base.html:110 +msgid "Order Reference" +msgstr "" + +#: order/templates/order/order_base.html:111 +#: order/templates/order/return_order_base.html:106 +#: order/templates/order/sales_order_base.html:115 +msgid "Order Description" +msgstr "" + +#: order/templates/order/order_base.html:141 +msgid "No suppplier information available" +msgstr "" + +#: order/templates/order/order_base.html:154 +#: order/templates/order/sales_order_base.html:161 +msgid "Completed Line Items" +msgstr "" + +#: order/templates/order/order_base.html:160 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 +msgid "Incomplete" +msgstr "" + +#: order/templates/order/order_base.html:179 +#: order/templates/order/return_order_base.html:157 +#: report/templates/report/inventree_build_order_report.html:121 +msgid "Issued" +msgstr "" + +#: order/templates/order/order_base.html:224 +msgid "Total cost" +msgstr "" + +#: order/templates/order/order_base.html:228 +#: order/templates/order/return_order_base.html:199 +#: order/templates/order/sales_order_base.html:243 +msgid "Total cost could not be calculated" +msgstr "" + +#: order/templates/order/order_base.html:314 +msgid "Purchase Order QR Code" +msgstr "" + +#: order/templates/order/order_base.html:326 +msgid "Link Barcode to Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:9 +#: part/templates/part/import_wizard/ajax_match_fields.html:9 +#: part/templates/part/import_wizard/match_fields.html:9 +#: templates/patterns/wizard/match_fields.html:8 +msgid "Missing selections for the following required columns" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:20 +#: part/templates/part/import_wizard/ajax_match_fields.html:20 +#: part/templates/part/import_wizard/match_fields.html:20 +#: templates/patterns/wizard/match_fields.html:19 +msgid "Duplicate selections found, see below. Fix them then retry submitting." +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:29 +#: order/templates/order/order_wizard/match_parts.html:21 +#: part/templates/part/import_wizard/match_fields.html:29 +#: part/templates/part/import_wizard/match_references.html:21 +#: templates/patterns/wizard/match_fields.html:28 +msgid "Submit Selections" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:35 +#: part/templates/part/import_wizard/ajax_match_fields.html:28 +#: part/templates/part/import_wizard/match_fields.html:35 +#: templates/patterns/wizard/match_fields.html:34 +msgid "File Fields" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:42 +#: part/templates/part/import_wizard/ajax_match_fields.html:35 +#: part/templates/part/import_wizard/match_fields.html:42 +#: templates/patterns/wizard/match_fields.html:41 +msgid "Remove column" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:60 +#: part/templates/part/import_wizard/ajax_match_fields.html:53 +#: part/templates/part/import_wizard/match_fields.html:60 +#: templates/patterns/wizard/match_fields.html:59 +msgid "Duplicate selection" +msgstr "" + +#: order/templates/order/order_wizard/match_fields.html:71 +#: order/templates/order/order_wizard/match_parts.html:52 +#: part/templates/part/import_wizard/ajax_match_fields.html:64 +#: part/templates/part/import_wizard/ajax_match_references.html:42 +#: part/templates/part/import_wizard/match_fields.html:71 +#: part/templates/part/import_wizard/match_references.html:49 +#: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 +#: templates/js/translated/build.js:1629 +#: templates/js/translated/purchase_order.js:696 +#: templates/js/translated/purchase_order.js:1236 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 +#: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 +#: templates/patterns/wizard/match_fields.html:70 +msgid "Remove row" +msgstr "" + +#: order/templates/order/order_wizard/match_parts.html:12 +#: part/templates/part/import_wizard/ajax_match_references.html:12 +#: part/templates/part/import_wizard/match_references.html:12 +msgid "Errors exist in the submitted data" +msgstr "" + +#: order/templates/order/order_wizard/match_parts.html:28 +#: part/templates/part/import_wizard/ajax_match_references.html:21 +#: part/templates/part/import_wizard/match_references.html:28 +msgid "Row" +msgstr "" + +#: order/templates/order/order_wizard/match_parts.html:29 +msgid "Select Supplier Part" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:8 +msgid "Return to Orders" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:13 +msgid "Upload File for Purchase Order" +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:14 +msgid "Order is already processed. Files cannot be uploaded." +msgstr "" + +#: order/templates/order/order_wizard/po_upload.html:27 +#: part/templates/part/import_wizard/ajax_part_upload.html:10 +#: part/templates/part/import_wizard/part_upload.html:26 +#: templates/patterns/wizard/upload.html:13 +#, python-format +msgid "Step %(step)s of %(count)s" +msgstr "" + +#: order/templates/order/po_sidebar.html:7 +msgid "Received Stock" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:18 +msgid "Purchase Order Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:27 +#: order/templates/order/return_order_detail.html:24 +#: order/templates/order/sales_order_detail.html:24 +#: templates/js/translated/purchase_order.js:414 +#: templates/js/translated/return_order.js:458 +#: templates/js/translated/sales_order.js:237 +msgid "Add Line Item" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:31 +#: order/templates/order/purchase_order_detail.html:32 +#: order/templates/order/return_order_detail.html:28 +#: order/templates/order/return_order_detail.html:29 +msgid "Receive Line Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:50 +#: order/templates/order/return_order_detail.html:45 +#: order/templates/order/sales_order_detail.html:41 +msgid "Extra Lines" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:56 +#: order/templates/order/return_order_detail.html:51 +#: order/templates/order/sales_order_detail.html:47 +msgid "Add Extra Line" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:74 +msgid "Received Items" +msgstr "" + +#: order/templates/order/purchase_order_detail.html:99 +#: order/templates/order/return_order_detail.html:85 +#: order/templates/order/sales_order_detail.html:139 +msgid "Order Notes" +msgstr "" + +#: order/templates/order/return_order_base.html:18 +#: order/templates/order/sales_order_base.html:18 +msgid "Customer logo thumbnail" +msgstr "" + +#: order/templates/order/return_order_base.html:60 +msgid "Print return order report" +msgstr "" + +#: order/templates/order/return_order_base.html:64 +#: order/templates/order/sales_order_base.html:64 +msgid "Print packing list" +msgstr "" + +#: order/templates/order/return_order_base.html:138 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 +msgid "Customer Reference" +msgstr "" + +#: order/templates/order/return_order_base.html:195 +#: order/templates/order/sales_order_base.html:239 +#: part/templates/part/part_pricing.html:32 +#: part/templates/part/part_pricing.html:58 +#: part/templates/part/part_pricing.html:99 +#: part/templates/part/part_pricing.html:114 +#: templates/js/translated/part.js:1072 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 +msgid "Total Cost" +msgstr "" + +#: order/templates/order/return_order_base.html:259 +msgid "Return Order QR Code" +msgstr "" + +#: order/templates/order/return_order_base.html:271 +msgid "Link Barcode to Return Order" +msgstr "" + +#: order/templates/order/return_order_sidebar.html:5 +msgid "Order Details" +msgstr "" + +#: order/templates/order/sales_order_base.html:60 +msgid "Print sales order report" +msgstr "" + +#: order/templates/order/sales_order_base.html:88 +#: order/templates/order/sales_order_base.html:89 +msgid "Ship Items" +msgstr "" + +#: order/templates/order/sales_order_base.html:92 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 +msgid "Complete Sales Order" +msgstr "" + +#: order/templates/order/sales_order_base.html:135 +msgid "This Sales Order has not been fully allocated" +msgstr "" + +#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_detail.html:99 +#: order/templates/order/so_sidebar.html:11 +msgid "Completed Shipments" +msgstr "" + +#: order/templates/order/sales_order_base.html:321 +msgid "Sales Order QR Code" +msgstr "" + +#: order/templates/order/sales_order_base.html:333 +msgid "Link Barcode to Sales Order" +msgstr "" + +#: order/templates/order/sales_order_detail.html:18 +msgid "Sales Order Items" +msgstr "" + +#: order/templates/order/sales_order_detail.html:67 +#: order/templates/order/so_sidebar.html:8 templates/InvenTree/index.html:284 +msgid "Pending Shipments" +msgstr "" + +#: order/templates/order/sales_order_detail.html:71 +#: templates/js/translated/bom.js:1277 templates/js/translated/filters.js:296 +msgid "Actions" +msgstr "" + +#: order/templates/order/sales_order_detail.html:80 +msgid "New Shipment" +msgstr "" + +#: order/views.py:120 +msgid "Match Supplier Parts" +msgstr "" + +#: order/views.py:406 +msgid "Sales order not found" +msgstr "" + +#: order/views.py:412 +msgid "Price not found" +msgstr "" + +#: order/views.py:415 +#, python-brace-format +msgid "Updated {part} unit-price to {price}" +msgstr "" + +#: order/views.py:421 +#, python-brace-format +msgid "Updated {part} unit-price to {price} and quantity to {qty}" +msgstr "" + +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 +#: stock/admin.py:153 +msgid "Part ID" +msgstr "" + +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 +#: stock/admin.py:157 +msgid "Part Name" +msgstr "" + +#: part/admin.py:45 part/stocktake.py:220 +msgid "Part Description" +msgstr "" + +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 +msgid "IPN" +msgstr "" + +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 +msgid "Revision" +msgstr "" + +#: part/admin.py:53 part/admin.py:319 part/models.py:929 +#: part/templates/part/category.html:94 part/templates/part/part_base.html:298 +msgid "Keywords" +msgstr "" + +#: part/admin.py:60 +msgid "Part Image" +msgstr "" + +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 +msgid "Category ID" +msgstr "" + +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 +msgid "Category Name" +msgstr "" + +#: part/admin.py:71 part/admin.py:316 +msgid "Default Location ID" +msgstr "" + +#: part/admin.py:76 +msgid "Default Supplier ID" +msgstr "" + +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 +msgid "Variant Of" +msgstr "" + +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 +msgid "Minimum Stock" +msgstr "" + +#: part/admin.py:138 part/templates/part/part_sidebar.html:27 +msgid "Used In" +msgstr "" + +#: part/admin.py:150 part/templates/part/part_base.html:241 stock/admin.py:231 +#: templates/js/translated/part.js:714 templates/js/translated/part.js:2152 +msgid "Building" +msgstr "" + +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 +#: templates/js/translated/part.js:969 +msgid "Minimum Cost" +msgstr "" + +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 +#: templates/js/translated/part.js:979 +msgid "Maximum Cost" +msgstr "" + +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 +msgid "Parent ID" +msgstr "" + +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 +msgid "Parent Name" +msgstr "" + +#: part/admin.py:320 part/templates/part/category.html:88 +#: part/templates/part/category.html:101 +msgid "Category Path" +msgstr "" + +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 +#: part/serializers.py:272 part/serializers.py:391 +#: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 +#: part/templates/part/category.html:141 part/templates/part/category.html:161 +#: part/templates/part/category_sidebar.html:9 +#: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 +#: templates/InvenTree/settings/sidebar.html:47 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 +#: templates/navbar.html:24 users/models.py:203 +msgid "Parts" +msgstr "" + +#: part/admin.py:386 +msgid "BOM Level" +msgstr "" + +#: part/admin.py:389 +msgid "BOM Item ID" +msgstr "" + +#: part/admin.py:399 +msgid "Parent IPN" +msgstr "" + +#: part/admin.py:410 part/models.py:3966 +msgid "Part IPN" +msgstr "" + +#: part/admin.py:423 part/serializers.py:1278 +#: templates/js/translated/pricing.js:358 +#: templates/js/translated/pricing.js:1024 +msgid "Minimum Price" +msgstr "" + +#: part/admin.py:428 part/serializers.py:1293 +#: templates/js/translated/pricing.js:353 +#: templates/js/translated/pricing.js:1032 +msgid "Maximum Price" +msgstr "" + +#: part/api.py:110 +msgid "Starred" +msgstr "" + +#: part/api.py:112 +msgid "Filter by starred categories" +msgstr "" + +#: part/api.py:129 stock/api.py:318 +msgid "Depth" +msgstr "" + +#: part/api.py:129 +msgid "Filter by category depth" +msgstr "" + +#: part/api.py:147 stock/api.py:336 +msgid "Cascade" +msgstr "" + +#: part/api.py:149 +msgid "Include sub-categories in filtered results" +msgstr "" + +#: part/api.py:169 +msgid "Parent" +msgstr "" + +#: part/api.py:171 +msgid "Filter by parent category" +msgstr "" + +#: part/api.py:204 +msgid "Exclude Tree" +msgstr "" + +#: part/api.py:206 +msgid "Exclude sub-categories under the specified category" +msgstr "" + +#: part/api.py:455 +msgid "Has Results" +msgstr "" + +#: part/api.py:622 +msgid "Incoming Purchase Order" +msgstr "" + +#: part/api.py:640 +msgid "Outgoing Sales Order" +msgstr "" + +#: part/api.py:656 +msgid "Stock produced by Build Order" +msgstr "" + +#: part/api.py:740 +msgid "Stock required for Build Order" +msgstr "" + +#: part/api.py:887 +msgid "Valid" +msgstr "" + +#: part/api.py:888 +msgid "Validate entire Bill of Materials" +msgstr "" + +#: part/api.py:894 +msgid "This option must be selected" +msgstr "" + +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 +#: templates/InvenTree/settings/settings_staff_js.html:300 +#: templates/js/translated/notification.js:60 +#: templates/js/translated/part.js:2376 +msgid "Category" +msgstr "" + +#: part/api.py:1803 +msgid "Uses" +msgstr "" + +#: part/bom.py:170 part/models.py:102 part/models.py:982 +#: part/templates/part/category.html:116 part/templates/part/part_base.html:367 +msgid "Default Location" +msgstr "" + +#: part/bom.py:171 part/serializers.py:837 +#: templates/email/low_stock_notification.html:16 +msgid "Total Stock" +msgstr "" + +#: part/forms.py:49 +msgid "Input quantity for price calculation" +msgstr "" + +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 +#: part/templates/part/part_app_base.html:10 +msgid "Part Category" +msgstr "" + +#: part/models.py:84 part/templates/part/category.html:136 +#: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 +#: users/models.py:202 +msgid "Part Categories" +msgstr "" + +#: part/models.py:103 +msgid "Default location for parts in this category" +msgstr "" + +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 +#: templates/js/translated/stock.js:2772 +#: templates/js/translated/table_filters.js:239 +#: templates/js/translated/table_filters.js:283 +msgid "Structural" +msgstr "" + +#: part/models.py:110 +msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." +msgstr "" + +#: part/models.py:119 +msgid "Default keywords" +msgstr "" + +#: part/models.py:120 +msgid "Default keywords for parts in this category" +msgstr "" + +#: part/models.py:126 stock/models.py:85 stock/models.py:156 +#: templates/InvenTree/settings/settings_staff_js.html:456 +msgid "Icon" +msgstr "" + +#: part/models.py:127 stock/models.py:157 +msgid "Icon (optional)" +msgstr "" + +#: part/models.py:149 +msgid "You cannot make this part category structural because some parts are already assigned to it!" +msgstr "" + +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 +msgid "Invalid choice for parent part" +msgstr "" + +#: part/models.py:575 part/models.py:582 +#, python-brace-format +msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" +msgstr "" + +#: part/models.py:594 +#, python-brace-format +msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" +msgstr "" + +#: part/models.py:659 +#, python-brace-format +msgid "IPN must match regex pattern {pattern}" +msgstr "" + +#: part/models.py:739 +msgid "Stock item with this serial number already exists" +msgstr "" + +#: part/models.py:844 +msgid "Duplicate IPN not allowed in part settings" +msgstr "" + +#: part/models.py:854 +msgid "Part with this Name, IPN and Revision already exists." +msgstr "" + +#: part/models.py:869 +msgid "Parts cannot be assigned to structural part categories!" +msgstr "" + +#: part/models.py:898 part/models.py:3965 +msgid "Part name" +msgstr "" + +#: part/models.py:903 +msgid "Is Template" +msgstr "" + +#: part/models.py:904 +msgid "Is this part a template part?" +msgstr "" + +#: part/models.py:914 +msgid "Is this part a variant of another part?" +msgstr "" + +#: part/models.py:922 +msgid "Part description (optional)" +msgstr "" + +#: part/models.py:930 +msgid "Part keywords to improve visibility in search results" +msgstr "" + +#: part/models.py:940 +msgid "Part category" +msgstr "" + +#: part/models.py:948 +msgid "Internal Part Number" +msgstr "" + +#: part/models.py:955 +msgid "Part revision or version number" +msgstr "" + +#: part/models.py:980 +msgid "Where is this item normally stored?" +msgstr "" + +#: part/models.py:1026 part/templates/part/part_base.html:376 +msgid "Default Supplier" +msgstr "" + +#: part/models.py:1027 +msgid "Default supplier part" +msgstr "" + +#: part/models.py:1034 +msgid "Default Expiry" +msgstr "" + +#: part/models.py:1035 +msgid "Expiry time (in days) for stock items of this part" +msgstr "" + +#: part/models.py:1044 +msgid "Minimum allowed stock level" +msgstr "" + +#: part/models.py:1053 +msgid "Units of measure for this part" +msgstr "" + +#: part/models.py:1060 +msgid "Can this part be built from other parts?" +msgstr "" + +#: part/models.py:1066 +msgid "Can this part be used to build other parts?" +msgstr "" + +#: part/models.py:1072 +msgid "Does this part have tracking for unique items?" +msgstr "" + +#: part/models.py:1078 +msgid "Can this part be purchased from external suppliers?" +msgstr "" + +#: part/models.py:1084 +msgid "Can this part be sold to customers?" +msgstr "" + +#: part/models.py:1088 +msgid "Is this part active?" +msgstr "" + +#: part/models.py:1094 +msgid "Is this a virtual part, such as a software product or license?" +msgstr "" + +#: part/models.py:1100 +msgid "BOM checksum" +msgstr "" + +#: part/models.py:1101 +msgid "Stored BOM checksum" +msgstr "" + +#: part/models.py:1109 +msgid "BOM checked by" +msgstr "" + +#: part/models.py:1114 +msgid "BOM checked date" +msgstr "" + +#: part/models.py:1130 +msgid "Creation User" +msgstr "" + +#: part/models.py:1140 +msgid "Owner responsible for this part" +msgstr "" + +#: part/models.py:1145 part/templates/part/part_base.html:339 +#: stock/templates/stock/item_base.html:451 +#: templates/js/translated/part.js:2470 +msgid "Last Stocktake" +msgstr "" + +#: part/models.py:2018 +msgid "Sell multiple" +msgstr "" + +#: part/models.py:3037 +msgid "Currency used to cache pricing calculations" +msgstr "" + +#: part/models.py:3053 +msgid "Minimum BOM Cost" +msgstr "" + +#: part/models.py:3054 +msgid "Minimum cost of component parts" +msgstr "" + +#: part/models.py:3060 +msgid "Maximum BOM Cost" +msgstr "" + +#: part/models.py:3061 +msgid "Maximum cost of component parts" +msgstr "" + +#: part/models.py:3067 +msgid "Minimum Purchase Cost" +msgstr "" + +#: part/models.py:3068 +msgid "Minimum historical purchase cost" +msgstr "" + +#: part/models.py:3074 +msgid "Maximum Purchase Cost" +msgstr "" + +#: part/models.py:3075 +msgid "Maximum historical purchase cost" +msgstr "" + +#: part/models.py:3081 +msgid "Minimum Internal Price" +msgstr "" + +#: part/models.py:3082 +msgid "Minimum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3088 +msgid "Maximum Internal Price" +msgstr "" + +#: part/models.py:3089 +msgid "Maximum cost based on internal price breaks" +msgstr "" + +#: part/models.py:3095 +msgid "Minimum Supplier Price" +msgstr "" + +#: part/models.py:3096 +msgid "Minimum price of part from external suppliers" +msgstr "" + +#: part/models.py:3102 +msgid "Maximum Supplier Price" +msgstr "" + +#: part/models.py:3103 +msgid "Maximum price of part from external suppliers" +msgstr "" + +#: part/models.py:3109 +msgid "Minimum Variant Cost" +msgstr "" + +#: part/models.py:3110 +msgid "Calculated minimum cost of variant parts" +msgstr "" + +#: part/models.py:3116 +msgid "Maximum Variant Cost" +msgstr "" + +#: part/models.py:3117 +msgid "Calculated maximum cost of variant parts" +msgstr "" + +#: part/models.py:3124 +msgid "Override minimum cost" +msgstr "" + +#: part/models.py:3131 +msgid "Override maximum cost" +msgstr "" + +#: part/models.py:3138 +msgid "Calculated overall minimum cost" +msgstr "" + +#: part/models.py:3145 +msgid "Calculated overall maximum cost" +msgstr "" + +#: part/models.py:3151 +msgid "Minimum Sale Price" +msgstr "" + +#: part/models.py:3152 +msgid "Minimum sale price based on price breaks" +msgstr "" + +#: part/models.py:3158 +msgid "Maximum Sale Price" +msgstr "" + +#: part/models.py:3159 +msgid "Maximum sale price based on price breaks" +msgstr "" + +#: part/models.py:3165 +msgid "Minimum Sale Cost" +msgstr "" + +#: part/models.py:3166 +msgid "Minimum historical sale price" +msgstr "" + +#: part/models.py:3172 +msgid "Maximum Sale Cost" +msgstr "" + +#: part/models.py:3173 +msgid "Maximum historical sale price" +msgstr "" + +#: part/models.py:3192 +msgid "Part for stocktake" +msgstr "" + +#: part/models.py:3197 +msgid "Item Count" +msgstr "" + +#: part/models.py:3198 +msgid "Number of individual stock entries at time of stocktake" +msgstr "" + +#: part/models.py:3206 +msgid "Total available stock at time of stocktake" +msgstr "" + +#: part/models.py:3210 part/models.py:3293 +#: part/templates/part/part_scheduling.html:13 +#: report/templates/report/inventree_test_report.html:106 +#: templates/InvenTree/settings/plugin_settings.html:37 +#: templates/InvenTree/settings/settings_staff_js.html:540 +#: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 +#: templates/js/translated/pricing.js:950 +#: templates/js/translated/purchase_order.js:1731 +#: templates/js/translated/stock.js:2821 +msgid "Date" +msgstr "" + +#: part/models.py:3211 +msgid "Date stocktake was performed" +msgstr "" + +#: part/models.py:3219 +msgid "Additional notes" +msgstr "" + +#: part/models.py:3229 +msgid "User who performed this stocktake" +msgstr "" + +#: part/models.py:3235 +msgid "Minimum Stock Cost" +msgstr "" + +#: part/models.py:3236 +msgid "Estimated minimum cost of stock on hand" +msgstr "" + +#: part/models.py:3242 +msgid "Maximum Stock Cost" +msgstr "" + +#: part/models.py:3243 +msgid "Estimated maximum cost of stock on hand" +msgstr "" + +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 +msgid "Report" +msgstr "" + +#: part/models.py:3300 +msgid "Stocktake report file (generated internally)" +msgstr "" + +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 +msgid "Part Count" +msgstr "" + +#: part/models.py:3306 +msgid "Number of parts covered by stocktake" +msgstr "" + +#: part/models.py:3316 +msgid "User who requested this stocktake report" +msgstr "" + +#: part/models.py:3478 +msgid "Invalid template name - must include at least one alphanumeric character" +msgstr "" + +#: part/models.py:3489 +msgid "Test templates can only be created for trackable parts" +msgstr "" + +#: part/models.py:3500 +msgid "Test template with the same key already exists for part" +msgstr "" + +#: part/models.py:3517 templates/js/translated/part.js:2878 +msgid "Test Name" +msgstr "" + +#: part/models.py:3518 +msgid "Enter a name for the test" +msgstr "" + +#: part/models.py:3524 +msgid "Test Key" +msgstr "" + +#: part/models.py:3525 +msgid "Simplified key for the test" +msgstr "" + +#: part/models.py:3532 +msgid "Test Description" +msgstr "" + +#: part/models.py:3533 +msgid "Enter description for this test" +msgstr "" + +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 +msgid "Is this test enabled?" +msgstr "" + +#: part/models.py:3542 templates/js/translated/part.js:2907 +#: templates/js/translated/table_filters.js:477 +msgid "Required" +msgstr "" + +#: part/models.py:3543 +msgid "Is this test required to pass?" +msgstr "" + +#: part/models.py:3548 templates/js/translated/part.js:2915 +msgid "Requires Value" +msgstr "" + +#: part/models.py:3549 +msgid "Does this test require a value when adding a test result?" +msgstr "" + +#: part/models.py:3554 templates/js/translated/part.js:2922 +msgid "Requires Attachment" +msgstr "" + +#: part/models.py:3556 +msgid "Does this test require a file attachment when adding a test result?" +msgstr "" + +#: part/models.py:3603 +msgid "Checkbox parameters cannot have units" +msgstr "" + +#: part/models.py:3608 +msgid "Checkbox parameters cannot have choices" +msgstr "" + +#: part/models.py:3628 +msgid "Choices must be unique" +msgstr "" + +#: part/models.py:3645 +msgid "Parameter template name must be unique" +msgstr "" + +#: part/models.py:3660 +msgid "Parameter Name" +msgstr "" + +#: part/models.py:3667 +msgid "Physical units for this parameter" +msgstr "" + +#: part/models.py:3675 +msgid "Parameter description" +msgstr "" + +#: part/models.py:3681 templates/js/translated/part.js:1627 +#: templates/js/translated/table_filters.js:825 +msgid "Checkbox" +msgstr "" + +#: part/models.py:3682 +msgid "Is this parameter a checkbox?" +msgstr "" + +#: part/models.py:3687 templates/js/translated/part.js:1636 +msgid "Choices" +msgstr "" + +#: part/models.py:3688 +msgid "Valid choices for this parameter (comma-separated)" +msgstr "" + +#: part/models.py:3765 +msgid "Invalid choice for parameter value" +msgstr "" + +#: part/models.py:3808 +msgid "Parent Part" +msgstr "" + +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 +#: templates/InvenTree/settings/settings_staff_js.html:295 +msgid "Parameter Template" +msgstr "" + +#: part/models.py:3821 +msgid "Data" +msgstr "" + +#: part/models.py:3822 +msgid "Parameter Value" +msgstr "" + +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 +msgid "Default Value" +msgstr "" + +#: part/models.py:3925 +msgid "Default Parameter Value" +msgstr "" + +#: part/models.py:3963 +msgid "Part ID or part name" +msgstr "" + +#: part/models.py:3964 +msgid "Unique part ID value" +msgstr "" + +#: part/models.py:3966 +msgid "Part IPN value" +msgstr "" + +#: part/models.py:3967 +msgid "Level" +msgstr "" + +#: part/models.py:3967 +msgid "BOM level" +msgstr "" + +#: part/models.py:4057 +msgid "Select parent part" +msgstr "" + +#: part/models.py:4067 +msgid "Sub part" +msgstr "" + +#: part/models.py:4068 +msgid "Select part to be used in BOM" +msgstr "" + +#: part/models.py:4079 +msgid "BOM quantity for this BOM item" +msgstr "" + +#: part/models.py:4085 +msgid "This BOM item is optional" +msgstr "" + +#: part/models.py:4091 +msgid "This BOM item is consumable (it is not tracked in build orders)" +msgstr "" + +#: part/models.py:4098 part/templates/part/upload_bom.html:55 +msgid "Overage" +msgstr "" + +#: part/models.py:4099 +msgid "Estimated build wastage quantity (absolute or percentage)" +msgstr "" + +#: part/models.py:4106 +msgid "BOM item reference" +msgstr "" + +#: part/models.py:4114 +msgid "BOM item notes" +msgstr "" + +#: part/models.py:4120 +msgid "Checksum" +msgstr "" + +#: part/models.py:4121 +msgid "BOM line checksum" +msgstr "" + +#: part/models.py:4126 templates/js/translated/table_filters.js:174 +msgid "Validated" +msgstr "" + +#: part/models.py:4127 +msgid "This BOM item has been validated" +msgstr "" + +#: part/models.py:4132 part/templates/part/upload_bom.html:57 +#: templates/js/translated/bom.js:1054 +#: templates/js/translated/table_filters.js:178 +#: templates/js/translated/table_filters.js:211 +msgid "Gets inherited" +msgstr "" + +#: part/models.py:4133 +msgid "This BOM item is inherited by BOMs for variant parts" +msgstr "" + +#: part/models.py:4138 part/templates/part/upload_bom.html:56 +#: templates/js/translated/bom.js:1046 +msgid "Allow Variants" +msgstr "" + +#: part/models.py:4139 +msgid "Stock items for variant parts can be used for this BOM item" +msgstr "" + +#: part/models.py:4224 stock/models.py:664 +msgid "Quantity must be integer value for trackable parts" +msgstr "" + +#: part/models.py:4234 part/models.py:4236 +msgid "Sub part must be specified" +msgstr "" + +#: part/models.py:4376 +msgid "BOM Item Substitute" +msgstr "" + +#: part/models.py:4397 +msgid "Substitute part cannot be the same as the master part" +msgstr "" + +#: part/models.py:4410 +msgid "Parent BOM item" +msgstr "" + +#: part/models.py:4418 +msgid "Substitute part" +msgstr "" + +#: part/models.py:4434 +msgid "Part 1" +msgstr "" + +#: part/models.py:4442 +msgid "Part 2" +msgstr "" + +#: part/models.py:4443 +msgid "Select Related Part" +msgstr "" + +#: part/models.py:4462 +msgid "Part relationship cannot be created between a part and itself" +msgstr "" + +#: part/models.py:4467 +msgid "Duplicate relationship already exists" +msgstr "" + +#: part/serializers.py:119 part/serializers.py:141 +#: part/templates/part/category.html:122 part/templates/part/category.html:207 +#: part/templates/part/category_sidebar.html:7 +msgid "Subcategories" +msgstr "" + +#: part/serializers.py:185 +msgid "Results" +msgstr "" + +#: part/serializers.py:186 +msgid "Number of results recorded against this template" +msgstr "" + +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 +msgid "Purchase currency of this stock item" +msgstr "" + +#: part/serializers.py:273 +msgid "Number of parts using this template" +msgstr "" + +#: part/serializers.py:397 +msgid "No parts selected" +msgstr "" + +#: part/serializers.py:407 +msgid "Select category" +msgstr "" + +#: part/serializers.py:442 +msgid "Original Part" +msgstr "" + +#: part/serializers.py:443 +msgid "Select original part to duplicate" +msgstr "" + +#: part/serializers.py:448 +msgid "Copy Image" +msgstr "" + +#: part/serializers.py:449 +msgid "Copy image from original part" +msgstr "" + +#: part/serializers.py:455 part/templates/part/detail.html:277 +msgid "Copy BOM" +msgstr "" + +#: part/serializers.py:456 +msgid "Copy bill of materials from original part" +msgstr "" + +#: part/serializers.py:462 +msgid "Copy Parameters" +msgstr "" + +#: part/serializers.py:463 +msgid "Copy parameter data from original part" +msgstr "" + +#: part/serializers.py:469 +msgid "Copy Notes" +msgstr "" + +#: part/serializers.py:470 +msgid "Copy notes from original part" +msgstr "" + +#: part/serializers.py:488 +msgid "Initial Stock Quantity" +msgstr "" + +#: part/serializers.py:490 +msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." +msgstr "" + +#: part/serializers.py:497 +msgid "Initial Stock Location" +msgstr "" + +#: part/serializers.py:498 +msgid "Specify initial stock location for this Part" +msgstr "" + +#: part/serializers.py:515 +msgid "Select supplier (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:531 +msgid "Select manufacturer (or leave blank to skip)" +msgstr "" + +#: part/serializers.py:541 +msgid "Manufacturer part number" +msgstr "" + +#: part/serializers.py:548 +msgid "Selected company is not a valid supplier" +msgstr "" + +#: part/serializers.py:557 +msgid "Selected company is not a valid manufacturer" +msgstr "" + +#: part/serializers.py:568 +msgid "Manufacturer part matching this MPN already exists" +msgstr "" + +#: part/serializers.py:575 +msgid "Supplier part matching this SKU already exists" +msgstr "" + +#: part/serializers.py:838 +msgid "External Stock" +msgstr "" + +#: part/serializers.py:840 +msgid "Unallocated Stock" +msgstr "" + +#: part/serializers.py:843 +msgid "Variant Stock" +msgstr "" + +#: part/serializers.py:873 part/templates/part/copy_part.html:9 +#: templates/js/translated/part.js:471 +msgid "Duplicate Part" +msgstr "" + +#: part/serializers.py:874 +msgid "Copy initial data from another Part" +msgstr "" + +#: part/serializers.py:880 templates/js/translated/part.js:102 +msgid "Initial Stock" +msgstr "" + +#: part/serializers.py:881 +msgid "Create Part with initial stock quantity" +msgstr "" + +#: part/serializers.py:887 +msgid "Supplier Information" +msgstr "" + +#: part/serializers.py:888 +msgid "Add initial supplier information for this part" +msgstr "" + +#: part/serializers.py:896 +msgid "Copy Category Parameters" +msgstr "" + +#: part/serializers.py:897 +msgid "Copy parameter templates from selected part category" +msgstr "" + +#: part/serializers.py:902 +msgid "Existing Image" +msgstr "" + +#: part/serializers.py:903 +msgid "Filename of an existing part image" +msgstr "" + +#: part/serializers.py:920 +msgid "Image file does not exist" +msgstr "" + +#: part/serializers.py:1126 +msgid "Limit stocktake report to a particular part, and any variant parts" +msgstr "" + +#: part/serializers.py:1136 +msgid "Limit stocktake report to a particular part category, and any child categories" +msgstr "" + +#: part/serializers.py:1146 +msgid "Limit stocktake report to a particular stock location, and any child locations" +msgstr "" + +#: part/serializers.py:1152 +msgid "Exclude External Stock" +msgstr "" + +#: part/serializers.py:1153 +msgid "Exclude stock items in external locations" +msgstr "" + +#: part/serializers.py:1158 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1159 +msgid "Generate report file containing calculated stocktake data" +msgstr "" + +#: part/serializers.py:1164 +msgid "Update Parts" +msgstr "" + +#: part/serializers.py:1165 +msgid "Update specified parts with calculated stocktake data" +msgstr "" + +#: part/serializers.py:1173 +msgid "Stocktake functionality is not enabled" +msgstr "" + +#: part/serializers.py:1279 +msgid "Override calculated value for minimum price" +msgstr "" + +#: part/serializers.py:1286 +msgid "Minimum price currency" +msgstr "" + +#: part/serializers.py:1294 +msgid "Override calculated value for maximum price" +msgstr "" + +#: part/serializers.py:1301 +msgid "Maximum price currency" +msgstr "" + +#: part/serializers.py:1330 +msgid "Update" +msgstr "" + +#: part/serializers.py:1331 +msgid "Update pricing for this part" +msgstr "" + +#: part/serializers.py:1354 +#, python-brace-format +msgid "Could not convert from provided currencies to {default_currency}" +msgstr "" + +#: part/serializers.py:1361 +msgid "Minimum price must not be greater than maximum price" +msgstr "" + +#: part/serializers.py:1364 +msgid "Maximum price must not be less than minimum price" +msgstr "" + +#: part/serializers.py:1731 +msgid "Select part to copy BOM from" +msgstr "" + +#: part/serializers.py:1739 +msgid "Remove Existing Data" +msgstr "" + +#: part/serializers.py:1740 +msgid "Remove existing BOM items before copying" +msgstr "" + +#: part/serializers.py:1745 +msgid "Include Inherited" +msgstr "" + +#: part/serializers.py:1746 +msgid "Include BOM items which are inherited from templated parts" +msgstr "" + +#: part/serializers.py:1751 +msgid "Skip Invalid Rows" +msgstr "" + +#: part/serializers.py:1752 +msgid "Enable this option to skip invalid rows" +msgstr "" + +#: part/serializers.py:1757 +msgid "Copy Substitute Parts" +msgstr "" + +#: part/serializers.py:1758 +msgid "Copy substitute parts when duplicate BOM items" +msgstr "" + +#: part/serializers.py:1792 +msgid "Clear Existing BOM" +msgstr "" + +#: part/serializers.py:1793 +msgid "Delete existing BOM items before uploading" +msgstr "" + +#: part/serializers.py:1823 +msgid "No part column specified" +msgstr "" + +#: part/serializers.py:1867 +msgid "Multiple matching parts found" +msgstr "" + +#: part/serializers.py:1870 +msgid "No matching part found" +msgstr "" + +#: part/serializers.py:1873 +msgid "Part is not designated as a component" +msgstr "" + +#: part/serializers.py:1882 +msgid "Quantity not provided" +msgstr "" + +#: part/serializers.py:1890 +msgid "Invalid quantity" +msgstr "" + +#: part/serializers.py:1911 +msgid "At least one BOM item is required" +msgstr "" + +#: part/stocktake.py:224 templates/js/translated/part.js:1066 +#: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 +#: templates/js/translated/purchase_order.js:2084 +msgid "Total Quantity" +msgstr "" + +#: part/stocktake.py:225 +msgid "Total Cost Min" +msgstr "" + +#: part/stocktake.py:226 +msgid "Total Cost Max" +msgstr "" + +#: part/stocktake.py:284 +msgid "Stocktake Report Available" +msgstr "" + +#: part/stocktake.py:285 +msgid "A new stocktake report is available for download" +msgstr "" + +#: part/tasks.py:37 +msgid "Low stock notification" +msgstr "" + +#: part/tasks.py:39 +#, python-brace-format +msgid "The available stock for {part.name} has fallen below the configured minimum level" +msgstr "" + +#: part/templates/part/bom.html:6 +msgid "You do not have permission to edit the BOM." +msgstr "" + +#: part/templates/part/bom.html:15 +msgid "The BOM this part has been changed, and must be validated" +msgstr "" + +#: part/templates/part/bom.html:17 +#, python-format +msgid "This BOM was last checked by %(checker)s on %(check_date)s" +msgstr "" + +#: part/templates/part/bom.html:21 +msgid "This BOM has not been validated." +msgstr "" + +#: part/templates/part/category.html:35 +msgid "Perform stocktake for this part category" +msgstr "" + +#: part/templates/part/category.html:41 part/templates/part/category.html:45 +msgid "You are subscribed to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:49 +msgid "Subscribe to notifications for this category" +msgstr "" + +#: part/templates/part/category.html:55 +msgid "Category Actions" +msgstr "" + +#: part/templates/part/category.html:60 +msgid "Edit category" +msgstr "" + +#: part/templates/part/category.html:61 +msgid "Edit Category" +msgstr "" + +#: part/templates/part/category.html:65 +msgid "Delete category" +msgstr "" + +#: part/templates/part/category.html:66 +msgid "Delete Category" +msgstr "" + +#: part/templates/part/category.html:102 +msgid "Top level part category" +msgstr "" + +#: part/templates/part/category.html:127 +msgid "Parts (Including subcategories)" +msgstr "" + +#: part/templates/part/category.html:165 +msgid "Create new part" +msgstr "" + +#: part/templates/part/category.html:166 templates/js/translated/bom.js:444 +msgid "New Part" +msgstr "" + +#: part/templates/part/category.html:192 +#: templates/InvenTree/settings/part_parameters.html:7 +#: templates/InvenTree/settings/sidebar.html:49 +msgid "Part Parameters" +msgstr "" + +#: part/templates/part/category.html:211 +msgid "Create new part category" +msgstr "" + +#: part/templates/part/category.html:212 +msgid "New Category" +msgstr "" + +#: part/templates/part/category_sidebar.html:13 +msgid "Import Parts" +msgstr "" + +#: part/templates/part/copy_part.html:10 +#, python-format +msgid "Make a copy of part '%(full_name)s'." +msgstr "" + +#: part/templates/part/copy_part.html:14 +#: part/templates/part/create_part.html:11 +msgid "Possible Matching Parts" +msgstr "" + +#: part/templates/part/copy_part.html:15 +#: part/templates/part/create_part.html:12 +msgid "The new part may be a duplicate of these existing parts" +msgstr "" + +#: part/templates/part/create_part.html:17 +#, python-format +msgid "%(full_name)s - %(desc)s (%(match_per)s%% match)" +msgstr "" + +#: part/templates/part/detail.html:20 +msgid "Part Stock" +msgstr "" + +#: part/templates/part/detail.html:44 +msgid "Refresh scheduling data" +msgstr "" + +#: part/templates/part/detail.html:45 part/templates/part/prices.html:15 +#: templates/js/translated/tables.js:552 +msgid "Refresh" +msgstr "" + +#: part/templates/part/detail.html:66 +msgid "Add stocktake information" +msgstr "" + +#: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 +#: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 +#: templates/InvenTree/settings/sidebar.html:53 +#: templates/js/translated/stock.js:2216 users/models.py:204 +msgid "Stocktake" +msgstr "" + +#: part/templates/part/detail.html:83 +msgid "Part Test Templates" +msgstr "" + +#: part/templates/part/detail.html:88 +msgid "Add Test Template" +msgstr "" + +#: part/templates/part/detail.html:139 stock/templates/stock/item.html:49 +msgid "Sales Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:156 +msgid "Part Notes" +msgstr "" + +#: part/templates/part/detail.html:171 +msgid "Part Variants" +msgstr "" + +#: part/templates/part/detail.html:175 +msgid "Create new variant" +msgstr "" + +#: part/templates/part/detail.html:176 +msgid "New Variant" +msgstr "" + +#: part/templates/part/detail.html:199 +msgid "Add new parameter" +msgstr "" + +#: part/templates/part/detail.html:232 part/templates/part/part_sidebar.html:58 +msgid "Related Parts" +msgstr "" + +#: part/templates/part/detail.html:236 part/templates/part/detail.html:237 +msgid "Add Related" +msgstr "" + +#: part/templates/part/detail.html:255 part/templates/part/part_sidebar.html:17 +#: report/templates/report/inventree_bill_of_materials_report.html:100 +msgid "Bill of Materials" +msgstr "" + +#: part/templates/part/detail.html:260 +msgid "Export actions" +msgstr "" + +#: part/templates/part/detail.html:264 templates/js/translated/bom.js:340 +msgid "Export BOM" +msgstr "" + +#: part/templates/part/detail.html:266 +msgid "Print BOM Report" +msgstr "" + +#: part/templates/part/detail.html:272 +msgid "BOM actions" +msgstr "" + +#: part/templates/part/detail.html:276 +msgid "Upload BOM" +msgstr "" + +#: part/templates/part/detail.html:278 +msgid "Validate BOM" +msgstr "" + +#: part/templates/part/detail.html:283 part/templates/part/detail.html:284 +#: templates/js/translated/bom.js:1320 templates/js/translated/bom.js:1321 +msgid "Add BOM Item" +msgstr "" + +#: part/templates/part/detail.html:297 +msgid "Assemblies" +msgstr "" + +#: part/templates/part/detail.html:313 +msgid "Part Builds" +msgstr "" + +#: part/templates/part/detail.html:338 stock/templates/stock/item.html:36 +msgid "Build Order Allocations" +msgstr "" + +#: part/templates/part/detail.html:352 +msgid "Part Suppliers" +msgstr "" + +#: part/templates/part/detail.html:372 +msgid "Part Manufacturers" +msgstr "" + +#: part/templates/part/detail.html:655 +msgid "Related Part" +msgstr "" + +#: part/templates/part/detail.html:663 +msgid "Add Related Part" +msgstr "" + +#: part/templates/part/detail.html:748 +msgid "Add Test Result Template" +msgstr "" + +#: part/templates/part/import_wizard/ajax_part_upload.html:29 +#: part/templates/part/import_wizard/part_upload.html:14 +msgid "Insufficient privileges." +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:8 +msgid "Return to Parts" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:13 +msgid "Import Parts from File" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:31 +msgid "Requirements for part import" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:33 +msgid "The part import file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:33 +msgid "Part Import Template" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:89 +msgid "Download Part Import Template" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:92 +#: templates/js/translated/bom.js:309 templates/js/translated/bom.js:343 +#: templates/js/translated/order.js:129 templates/js/translated/tables.js:189 +msgid "Format" +msgstr "" + +#: part/templates/part/import_wizard/part_upload.html:93 +#: templates/js/translated/bom.js:310 templates/js/translated/bom.js:344 +#: templates/js/translated/order.js:130 +msgid "Select file format" +msgstr "" + +#: part/templates/part/part_app_base.html:12 +msgid "Part List" +msgstr "" + +#: part/templates/part/part_base.html:25 part/templates/part/part_base.html:29 +msgid "You are subscribed to notifications for this part" +msgstr "" + +#: part/templates/part/part_base.html:33 +msgid "Subscribe to notifications for this part" +msgstr "" + +#: part/templates/part/part_base.html:52 +#: stock/templates/stock/item_base.html:62 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 +msgid "Print Label" +msgstr "" + +#: part/templates/part/part_base.html:58 +msgid "Show pricing information" +msgstr "" + +#: part/templates/part/part_base.html:63 +#: stock/templates/stock/item_base.html:110 +#: stock/templates/stock/location.html:83 +msgid "Stock actions" +msgstr "" + +#: part/templates/part/part_base.html:70 +msgid "Count part stock" +msgstr "" + +#: part/templates/part/part_base.html:76 +msgid "Transfer part stock" +msgstr "" + +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 +msgid "Part actions" +msgstr "" + +#: part/templates/part/part_base.html:94 +msgid "Duplicate part" +msgstr "" + +#: part/templates/part/part_base.html:97 +msgid "Edit part" +msgstr "" + +#: part/templates/part/part_base.html:100 +msgid "Delete part" +msgstr "" + +#: part/templates/part/part_base.html:119 +msgid "Part is a template part (variants can be made from this part)" +msgstr "" + +#: part/templates/part/part_base.html:123 +msgid "Part can be assembled from other parts" +msgstr "" + +#: part/templates/part/part_base.html:127 +msgid "Part can be used in assemblies" +msgstr "" + +#: part/templates/part/part_base.html:131 +msgid "Part stock is tracked by serial number" +msgstr "" + +#: part/templates/part/part_base.html:135 +msgid "Part can be purchased from external suppliers" +msgstr "" + +#: part/templates/part/part_base.html:139 +msgid "Part can be sold to customers" +msgstr "" + +#: part/templates/part/part_base.html:145 +msgid "Part is not active" +msgstr "" + +#: part/templates/part/part_base.html:153 +msgid "Part is virtual (not a physical part)" +msgstr "" + +#: part/templates/part/part_base.html:163 +#: part/templates/part/part_base.html:681 +msgid "Show Part Details" +msgstr "" + +#: part/templates/part/part_base.html:218 +#: stock/templates/stock/item_base.html:388 +msgid "Allocated to Build Orders" +msgstr "" + +#: part/templates/part/part_base.html:227 +#: stock/templates/stock/item_base.html:381 +msgid "Allocated to Sales Orders" +msgstr "" + +#: part/templates/part/part_base.html:235 templates/js/translated/bom.js:1219 +msgid "Can Build" +msgstr "" + +#: part/templates/part/part_base.html:291 +msgid "Minimum stock level" +msgstr "" + +#: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 +#: templates/js/translated/pricing.js:391 +#: templates/js/translated/pricing.js:1054 +msgid "Price Range" +msgstr "" + +#: part/templates/part/part_base.html:352 +msgid "Latest Serial Number" +msgstr "" + +#: part/templates/part/part_base.html:356 +#: stock/templates/stock/item_base.html:322 +msgid "Search for serial number" +msgstr "" + +#: part/templates/part/part_base.html:444 +msgid "Part QR Code" +msgstr "" + +#: part/templates/part/part_base.html:461 +msgid "Link Barcode to Part" +msgstr "" + +#: part/templates/part/part_base.html:511 +msgid "Calculate" +msgstr "" + +#: part/templates/part/part_base.html:528 +msgid "Remove associated image from this part" +msgstr "" + +#: part/templates/part/part_base.html:579 +msgid "No matching images found" +msgstr "" + +#: part/templates/part/part_base.html:675 +msgid "Hide Part Details" +msgstr "" + +#: part/templates/part/part_pricing.html:22 part/templates/part/prices.html:76 +#: part/templates/part/prices.html:227 templates/js/translated/pricing.js:485 +msgid "Supplier Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:26 +#: part/templates/part/part_pricing.html:52 +#: part/templates/part/part_pricing.html:95 +#: part/templates/part/part_pricing.html:110 +msgid "Unit Cost" +msgstr "" + +#: part/templates/part/part_pricing.html:40 +msgid "No supplier pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:48 part/templates/part/prices.html:90 +#: part/templates/part/prices.html:250 +msgid "BOM Pricing" +msgstr "" + +#: part/templates/part/part_pricing.html:66 +msgid "Unit Purchase Price" +msgstr "" + +#: part/templates/part/part_pricing.html:72 +msgid "Total Purchase Price" +msgstr "" + +#: part/templates/part/part_pricing.html:83 +msgid "No BOM pricing available" +msgstr "" + +#: part/templates/part/part_pricing.html:92 +msgid "Internal Price" +msgstr "" + +#: part/templates/part/part_pricing.html:123 +msgid "No pricing information is available for this part." +msgstr "" + +#: part/templates/part/part_scheduling.html:14 +msgid "Scheduled Quantity" +msgstr "" + +#: part/templates/part/part_sidebar.html:11 +msgid "Variants" +msgstr "" + +#: part/templates/part/part_sidebar.html:14 +#: stock/templates/stock/loc_link.html:3 stock/templates/stock/location.html:24 +#: stock/templates/stock/stock_app_base.html:10 +#: templates/InvenTree/search.html:153 +#: templates/InvenTree/settings/sidebar.html:51 +#: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 +msgid "Stock" +msgstr "" + +#: part/templates/part/part_sidebar.html:30 +#: templates/InvenTree/settings/sidebar.html:39 +msgid "Pricing" +msgstr "" + +#: part/templates/part/part_sidebar.html:44 +msgid "Scheduling" +msgstr "" + +#: part/templates/part/part_sidebar.html:54 +msgid "Test Templates" +msgstr "" + +#: part/templates/part/part_thumb.html:11 +msgid "Select from existing images" +msgstr "" + +#: part/templates/part/prices.html:11 +msgid "Pricing Overview" +msgstr "" + +#: part/templates/part/prices.html:14 +msgid "Refresh Part Pricing" +msgstr "" + +#: part/templates/part/prices.html:17 +msgid "Override Part Pricing" +msgstr "" + +#: part/templates/part/prices.html:18 +#: templates/InvenTree/settings/settings_staff_js.html:80 +#: templates/InvenTree/settings/user.html:24 +#: templates/js/translated/helpers.js:100 +#: templates/js/translated/pricing.js:628 templates/notes_buttons.html:3 +#: templates/notes_buttons.html:4 +msgid "Edit" +msgstr "" + +#: part/templates/part/prices.html:28 stock/admin.py:247 +#: stock/templates/stock/item_base.html:446 +#: templates/js/translated/company.js:1703 +#: templates/js/translated/company.js:1713 +#: templates/js/translated/stock.js:2246 +msgid "Last Updated" +msgstr "" + +#: part/templates/part/prices.html:37 part/templates/part/prices.html:127 +msgid "Price Category" +msgstr "" + +#: part/templates/part/prices.html:38 part/templates/part/prices.html:128 +msgid "Minimum" +msgstr "" + +#: part/templates/part/prices.html:39 part/templates/part/prices.html:129 +msgid "Maximum" +msgstr "" + +#: part/templates/part/prices.html:51 part/templates/part/prices.html:174 +msgid "Internal Pricing" +msgstr "" + +#: part/templates/part/prices.html:64 part/templates/part/prices.html:206 +msgid "Purchase History" +msgstr "" + +#: part/templates/part/prices.html:98 part/templates/part/prices.html:274 +msgid "Variant Pricing" +msgstr "" + +#: part/templates/part/prices.html:106 +msgid "Pricing Overrides" +msgstr "" + +#: part/templates/part/prices.html:113 +msgid "Overall Pricing" +msgstr "" + +#: part/templates/part/prices.html:149 part/templates/part/prices.html:326 +msgid "Sale History" +msgstr "" + +#: part/templates/part/prices.html:157 +msgid "Sale price data is not available for this part" +msgstr "" + +#: part/templates/part/prices.html:164 +msgid "Price range data is not available for this part." +msgstr "" + +#: part/templates/part/prices.html:175 part/templates/part/prices.html:207 +#: part/templates/part/prices.html:228 part/templates/part/prices.html:251 +#: part/templates/part/prices.html:275 part/templates/part/prices.html:298 +#: part/templates/part/prices.html:327 +msgid "Jump to overview" +msgstr "" + +#: part/templates/part/prices.html:180 +msgid "Add Internal Price Break" +msgstr "" + +#: part/templates/part/prices.html:297 +msgid "Sale Pricing" +msgstr "" + +#: part/templates/part/prices.html:303 +msgid "Add Sell Price Break" +msgstr "" + +#: part/templates/part/pricing_javascript.html:24 +msgid "Update Pricing" +msgstr "" + +#: part/templates/part/stock_count.html:7 +#: templates/js/translated/model_renderers.js:227 +#: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 +#: templates/js/translated/part.js:2142 +msgid "No Stock" +msgstr "" + +#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:120 +msgid "Low Stock" +msgstr "" + +#: part/templates/part/upload_bom.html:8 +msgid "Return to BOM" +msgstr "" + +#: part/templates/part/upload_bom.html:13 +msgid "Upload Bill of Materials" +msgstr "" + +#: part/templates/part/upload_bom.html:19 +msgid "BOM upload requirements" +msgstr "" + +#: part/templates/part/upload_bom.html:23 +#: part/templates/part/upload_bom.html:90 +msgid "Upload BOM File" +msgstr "" + +#: part/templates/part/upload_bom.html:29 +msgid "Submit BOM Data" +msgstr "" + +#: part/templates/part/upload_bom.html:37 +msgid "Requirements for BOM upload" +msgstr "" + +#: part/templates/part/upload_bom.html:39 +msgid "The BOM file must contain the required named columns as provided in the " +msgstr "" + +#: part/templates/part/upload_bom.html:39 +msgid "BOM Upload Template" +msgstr "" + +#: part/templates/part/upload_bom.html:40 +msgid "Each part must already exist in the database" +msgstr "" + +#: part/templates/part/variant_part.html:9 +msgid "Create new part variant" +msgstr "" + +#: part/templates/part/variant_part.html:10 +msgid "Create a new variant part from this template" +msgstr "" + +#: part/views.py:111 +msgid "Match References" +msgstr "" + +#: part/views.py:275 +#, python-brace-format +msgid "Can't import part {new_part.name} because there is no category assigned" +msgstr "" + +#: part/views.py:425 +msgid "Select Part Image" +msgstr "" + +#: part/views.py:448 +msgid "Updated part image" +msgstr "" + +#: part/views.py:451 +msgid "Part image not found" +msgstr "" + +#: part/views.py:545 +msgid "Part Pricing" +msgstr "" + +#: plugin/api.py:170 +msgid "Plugin cannot be deleted as it is currently active" +msgstr "" + +#: plugin/base/action/api.py:32 +msgid "No action specified" +msgstr "" + +#: plugin/base/action/api.py:41 +msgid "No matching action found" +msgstr "" + +#: plugin/base/barcodes/api.py:124 plugin/base/barcodes/api.py:328 +#: plugin/base/barcodes/api.py:503 +msgid "No match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:128 +msgid "Match found for barcode data" +msgstr "" + +#: plugin/base/barcodes/api.py:154 +#: templates/js/translated/purchase_order.js:1406 +msgid "Barcode matches existing item" +msgstr "" + +#: plugin/base/barcodes/api.py:293 +msgid "No matching part data found" +msgstr "" + +#: plugin/base/barcodes/api.py:310 +msgid "No matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:314 +msgid "Multiple matching supplier parts found" +msgstr "" + +#: plugin/base/barcodes/api.py:338 +msgid "Matched supplier part" +msgstr "" + +#: plugin/base/barcodes/api.py:387 +msgid "Item has already been received" +msgstr "" + +#: plugin/base/barcodes/api.py:424 +msgid "No match for supplier barcode" +msgstr "" + +#: plugin/base/barcodes/api.py:467 +msgid "Multiple matching line items found" +msgstr "" + +#: plugin/base/barcodes/api.py:470 +msgid "No matching line item found" +msgstr "" + +#: plugin/base/barcodes/api.py:508 plugin/base/barcodes/api.py:515 +msgid "Barcode does not match an existing stock item" +msgstr "" + +#: plugin/base/barcodes/api.py:526 +msgid "Stock item does not match line item" +msgstr "" + +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 +msgid "Insufficient stock available" +msgstr "" + +#: plugin/base/barcodes/api.py:559 +msgid "Stock item allocated to sales order" +msgstr "" + +#: plugin/base/barcodes/api.py:563 +msgid "Not enough information" +msgstr "" + +#: plugin/base/barcodes/mixins.py:147 plugin/base/barcodes/mixins.py:179 +msgid "Found multiple matching supplier parts for barcode" +msgstr "" + +#: plugin/base/barcodes/mixins.py:197 +#, python-brace-format +msgid "Found multiple purchase orders matching '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:201 +#, python-brace-format +msgid "No matching purchase order for '{order}'" +msgstr "" + +#: plugin/base/barcodes/mixins.py:206 +msgid "Purchase order does not match supplier" +msgstr "" + +#: plugin/base/barcodes/mixins.py:440 +msgid "Failed to find pending line item for supplier part" +msgstr "" + +#: plugin/base/barcodes/mixins.py:471 +msgid "Further information required to receive line item" +msgstr "" + +#: plugin/base/barcodes/mixins.py:479 +msgid "Received purchase order line item" +msgstr "" + +#: plugin/base/barcodes/serializers.py:21 +msgid "Scanned barcode data" +msgstr "" + +#: plugin/base/barcodes/serializers.py:81 +msgid "Purchase Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:87 +msgid "Purchase order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:105 +msgid "PurchaseOrder to receive items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:111 +msgid "Purchase order has not been placed" +msgstr "" + +#: plugin/base/barcodes/serializers.py:119 +msgid "Location to receive items into" +msgstr "" + +#: plugin/base/barcodes/serializers.py:125 +msgid "Cannot select a structural location" +msgstr "" + +#: plugin/base/barcodes/serializers.py:139 +msgid "Sales Order to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:145 +msgid "Sales order is not pending" +msgstr "" + +#: plugin/base/barcodes/serializers.py:153 +msgid "Sales order line item to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:160 +msgid "Sales order shipment to allocate items against" +msgstr "" + +#: plugin/base/barcodes/serializers.py:166 +msgid "Shipment has already been delivered" +msgstr "" + +#: plugin/base/barcodes/serializers.py:171 +msgid "Quantity to allocate" +msgstr "" + +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 +msgid "Label printing failed" +msgstr "" + +#: plugin/base/label/mixins.py:56 +msgid "Error rendering label to PDF" +msgstr "" + +#: plugin/base/label/mixins.py:70 +msgid "Error rendering label to HTML" +msgstr "" + +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:25 +msgid "InvenTree Barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:26 +msgid "Provides native support for barcodes" +msgstr "" + +#: plugin/builtin/barcodes/inventree_barcode.py:28 +#: plugin/builtin/integration/core_notifications.py:35 +#: plugin/builtin/integration/currency_exchange.py:21 +#: plugin/builtin/labels/inventree_label.py:22 +#: plugin/builtin/labels/inventree_machine.py:64 +#: plugin/builtin/labels/label_sheet.py:63 +#: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 +#: plugin/builtin/suppliers/mouser.py:19 plugin/builtin/suppliers/tme.py:21 +msgid "InvenTree contributors" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:34 +msgid "InvenTree Notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:36 +msgid "Integrated outgoing notification methods" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:41 +#: plugin/builtin/integration/core_notifications.py:80 +msgid "Enable email notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:42 +#: plugin/builtin/integration/core_notifications.py:81 +msgid "Allow sending of emails for event notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:47 +msgid "Enable slack notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:49 +msgid "Allow sending of slack channel messages for event notifications" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:55 +msgid "Slack incoming webhook url" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:56 +msgid "URL that is used to send messages to a slack channel" +msgstr "" + +#: plugin/builtin/integration/core_notifications.py:164 +msgid "Open link" +msgstr "" + +#: plugin/builtin/integration/currency_exchange.py:22 +msgid "InvenTree Currency Exchange" +msgstr "" + +#: plugin/builtin/integration/currency_exchange.py:23 +msgid "Default currency exchange integration" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:19 +msgid "InvenTree PDF label printer" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:20 +msgid "Provides native support for printing PDF labels" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:28 +msgid "Debug mode" +msgstr "" + +#: plugin/builtin/labels/inventree_label.py:29 +msgid "Enable debug mode - returns raw HTML instead of PDF" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:61 +msgid "InvenTree machine label printer" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:62 +msgid "Provides support for printing using a machine" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:151 +msgid "last used" +msgstr "" + +#: plugin/builtin/labels/inventree_machine.py:168 +msgid "Options" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:29 +msgid "Page size for the label sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:34 +msgid "Skip Labels" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:35 +msgid "Skip this number of labels when printing label sheets" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:41 +msgid "Border" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:42 +msgid "Print a border around each label" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 +msgid "Landscape" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:48 +msgid "Print the label sheet in landscape mode" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:60 +msgid "InvenTree Label Sheet Printer" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:61 +msgid "Arrays multiple labels onto a single sheet" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:99 +msgid "Label is too large for page size" +msgstr "" + +#: plugin/builtin/labels/label_sheet.py:133 +msgid "No labels were generated" +msgstr "" + +#: plugin/builtin/suppliers/digikey.py:16 +msgid "Supplier Integration - DigiKey" +msgstr "" + +#: plugin/builtin/suppliers/digikey.py:17 +msgid "Provides support for scanning DigiKey barcodes" +msgstr "" + +#: plugin/builtin/suppliers/digikey.py:26 +msgid "The Supplier which acts as 'DigiKey'" +msgstr "" + +#: plugin/builtin/suppliers/lcsc.py:18 +msgid "Supplier Integration - LCSC" +msgstr "" + +#: plugin/builtin/suppliers/lcsc.py:19 +msgid "Provides support for scanning LCSC barcodes" +msgstr "" + +#: plugin/builtin/suppliers/lcsc.py:27 +msgid "The Supplier which acts as 'LCSC'" +msgstr "" + +#: plugin/builtin/suppliers/mouser.py:16 +msgid "Supplier Integration - Mouser" +msgstr "" + +#: plugin/builtin/suppliers/mouser.py:17 +msgid "Provides support for scanning Mouser barcodes" +msgstr "" + +#: plugin/builtin/suppliers/mouser.py:25 +msgid "The Supplier which acts as 'Mouser'" +msgstr "" + +#: plugin/builtin/suppliers/tme.py:18 +msgid "Supplier Integration - TME" +msgstr "" + +#: plugin/builtin/suppliers/tme.py:19 +msgid "Provides support for scanning TME barcodes" +msgstr "" + +#: plugin/builtin/suppliers/tme.py:27 +msgid "The Supplier which acts as 'TME'" +msgstr "" + +#: plugin/installer.py:194 plugin/installer.py:282 +msgid "Only staff users can administer plugins" +msgstr "" + +#: plugin/installer.py:197 +msgid "Plugin installation is disabled" +msgstr "" + +#: plugin/installer.py:248 +msgid "Installed plugin successfully" +msgstr "" + +#: plugin/installer.py:254 +#, python-brace-format +msgid "Installed plugin into {path}" +msgstr "" + +#: plugin/installer.py:273 +msgid "Plugin was not found in registry" +msgstr "" + +#: plugin/installer.py:276 +msgid "Plugin is not a packaged plugin" +msgstr "" + +#: plugin/installer.py:279 +msgid "Plugin package name not found" +msgstr "" + +#: plugin/installer.py:299 +msgid "Plugin uninstalling is disabled" +msgstr "" + +#: plugin/installer.py:303 +msgid "Plugin cannot be uninstalled as it is currently active" +msgstr "" + +#: plugin/installer.py:316 +msgid "Uninstalled plugin successfully" +msgstr "" + +#: plugin/models.py:35 +msgid "Plugin Configuration" +msgstr "" + +#: plugin/models.py:36 +msgid "Plugin Configurations" +msgstr "" + +#: plugin/models.py:42 users/models.py:100 +msgid "Key" +msgstr "" + +#: plugin/models.py:43 +msgid "Key of plugin" +msgstr "" + +#: plugin/models.py:51 +msgid "PluginName of the plugin" +msgstr "" + +#: plugin/models.py:58 plugin/serializers.py:90 +msgid "Package Name" +msgstr "" + +#: plugin/models.py:60 +msgid "Name of the installed package, if the plugin was installed via PIP" +msgstr "" + +#: plugin/models.py:65 +msgid "Is the plugin active" +msgstr "" + +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 +#: templates/js/translated/table_filters.js:504 +msgid "Installed" +msgstr "" + +#: plugin/models.py:165 +msgid "Sample plugin" +msgstr "" + +#: plugin/models.py:173 +msgid "Builtin Plugin" +msgstr "" + +#: plugin/models.py:181 +msgid "Package Plugin" +msgstr "" + +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 +#: templates/js/translated/plugin.js:51 +msgid "Plugin" +msgstr "" + +#: plugin/models.py:252 +msgid "Method" +msgstr "" + +#: plugin/plugin.py:270 +msgid "No author found" +msgstr "" + +#: plugin/registry.py:597 +#, python-brace-format +msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" +msgstr "" + +#: plugin/registry.py:600 +#, python-brace-format +msgid "Plugin requires at least version {v}" +msgstr "" + +#: plugin/registry.py:602 +#, python-brace-format +msgid "Plugin requires at most version {v}" +msgstr "" + +#: plugin/samples/integration/sample.py:52 +msgid "Enable PO" +msgstr "" + +#: plugin/samples/integration/sample.py:53 +msgid "Enable PO functionality in InvenTree interface" +msgstr "" + +#: plugin/samples/integration/sample.py:58 +msgid "API Key" +msgstr "" + +#: plugin/samples/integration/sample.py:59 +msgid "Key required for accessing external API" +msgstr "" + +#: plugin/samples/integration/sample.py:63 +msgid "Numerical" +msgstr "" + +#: plugin/samples/integration/sample.py:64 +msgid "A numerical setting" +msgstr "" + +#: plugin/samples/integration/sample.py:69 +msgid "Choice Setting" +msgstr "" + +#: plugin/samples/integration/sample.py:70 +msgid "A setting with multiple choices" +msgstr "" + +#: plugin/samples/integration/sample_currency_exchange.py:15 +msgid "Sample currency exchange plugin" +msgstr "" + +#: plugin/samples/integration/sample_currency_exchange.py:18 +msgid "InvenTree Contributors" +msgstr "" + +#: plugin/serializers.py:81 +msgid "Source URL" +msgstr "" + +#: plugin/serializers.py:83 +msgid "Source for the package - this can be a custom registry or a VCS path" +msgstr "" + +#: plugin/serializers.py:92 +msgid "Name for the Plugin Package - can also contain a version indicator" +msgstr "" + +#: plugin/serializers.py:99 +#: templates/InvenTree/settings/plugin_settings.html:42 +#: templates/js/translated/plugin.js:86 +msgid "Version" +msgstr "" + +#: plugin/serializers.py:101 +msgid "Version specifier for the plugin. Leave blank for latest version." +msgstr "" + +#: plugin/serializers.py:106 +msgid "Confirm plugin installation" +msgstr "" + +#: plugin/serializers.py:108 +msgid "This will install this plugin now into the current instance. The instance will go into maintenance." +msgstr "" + +#: plugin/serializers.py:121 +msgid "Installation not confirmed" +msgstr "" + +#: plugin/serializers.py:123 +msgid "Either packagename of URL must be provided" +msgstr "" + +#: plugin/serializers.py:161 +msgid "Full reload" +msgstr "" + +#: plugin/serializers.py:162 +msgid "Perform a full reload of the plugin registry" +msgstr "" + +#: plugin/serializers.py:168 +msgid "Force reload" +msgstr "" + +#: plugin/serializers.py:170 +msgid "Force a reload of the plugin registry, even if it is already loaded" +msgstr "" + +#: plugin/serializers.py:177 +msgid "Collect plugins" +msgstr "" + +#: plugin/serializers.py:178 +msgid "Collect plugins and add them to the registry" +msgstr "" + +#: plugin/serializers.py:205 +msgid "Activate Plugin" +msgstr "" + +#: plugin/serializers.py:206 +msgid "Activate this plugin" +msgstr "" + +#: plugin/serializers.py:234 +msgid "Delete configuration" +msgstr "" + +#: plugin/serializers.py:235 +msgid "Delete the plugin configuration from the database" +msgstr "" + +#: report/api.py:77 +msgid "No valid objects provided to template" +msgstr "" + +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 +#, python-brace-format +msgid "Template file '{template}' is missing or does not exist" +msgstr "" + +#: report/helpers.py:41 +msgid "A4" +msgstr "" + +#: report/helpers.py:42 +msgid "A3" +msgstr "" + +#: report/helpers.py:43 +msgid "Legal" +msgstr "" + +#: report/helpers.py:44 +msgid "Letter" +msgstr "" + +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 +msgid "Template name" +msgstr "" + +#: report/models.py:156 +msgid "Template description" +msgstr "" + +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" + +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "" + +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 +msgid "Page size for PDF reports" +msgstr "" + +#: report/models.py:308 +msgid "Render report in landscape orientation" +msgstr "" + +#: report/models.py:367 +msgid "Width [mm]" +msgstr "" + +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "" + +#: report/models.py:374 +msgid "Height [mm]" +msgstr "" + +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "" + +#: report/models.py:438 +msgid "Number of items to process" +msgstr "" + +#: report/models.py:444 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "" + +#: report/models.py:448 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:456 +msgid "Report Template" +msgstr "" + +#: report/models.py:463 report/models.py:486 +msgid "Output File" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" +msgstr "" + +#: report/models.py:475 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 +msgid "Snippet" +msgstr "" + +#: report/models.py:503 +msgid "Report snippet file" +msgstr "" + +#: report/models.py:510 +msgid "Snippet file description" +msgstr "" + +#: report/models.py:528 +msgid "Asset" +msgstr "" + +#: report/models.py:529 +msgid "Report asset file" +msgstr "" + +#: report/models.py:536 +msgid "Asset file description" +msgstr "" + +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "" + +#: report/templates/report/inventree_bill_of_materials_report.html:133 +msgid "Materials needed" +msgstr "" + +#: report/templates/report/inventree_build_order_report.html:146 +msgid "Required For" +msgstr "" + +#: report/templates/report/inventree_purchase_order_report.html:15 +msgid "Supplier was deleted" +msgstr "" + +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 +#: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 +#: templates/js/translated/pricing.js:596 +#: templates/js/translated/pricing.js:834 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 +msgid "Unit Price" +msgstr "" + +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 +msgid "Extra Line Items" +msgstr "" + +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 +msgid "Total" +msgstr "" + +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 +#: templates/js/translated/sales_order.js:315 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 +#: templates/js/translated/stock.js:596 +msgid "Serial Number" +msgstr "" + +#: report/templates/report/inventree_stock_location_report.html:97 +msgid "Stock location items" +msgstr "" + +#: report/templates/report/inventree_test_report.html:21 +msgid "Stock Item Test Report" +msgstr "" + +#: report/templates/report/inventree_test_report.html:97 +msgid "Test Results" +msgstr "" + +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 +msgid "Test" +msgstr "" + +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 +msgid "Result" +msgstr "" + +#: report/templates/report/inventree_test_report.html:130 +msgid "Pass" +msgstr "" + +#: report/templates/report/inventree_test_report.html:132 +msgid "Fail" +msgstr "" + +#: report/templates/report/inventree_test_report.html:139 +msgid "No result (required)" +msgstr "" + +#: report/templates/report/inventree_test_report.html:141 +msgid "No result" +msgstr "" + +#: report/templates/report/inventree_test_report.html:154 +#: stock/templates/stock/stock_sidebar.html:16 +msgid "Installed Items" +msgstr "" + +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 +msgid "Serial" +msgstr "" + +#: report/templatetags/report.py:96 +msgid "Asset file does not exist" +msgstr "" + +#: report/templatetags/report.py:152 report/templatetags/report.py:217 +msgid "Image file not found" +msgstr "" + +#: report/templatetags/report.py:242 +msgid "part_image tag requires a Part instance" +msgstr "" + +#: report/templatetags/report.py:283 +msgid "company_image tag requires a Company instance" +msgstr "" + +#: stock/admin.py:52 stock/admin.py:172 +msgid "Location ID" +msgstr "" + +#: stock/admin.py:54 stock/admin.py:176 +msgid "Location Name" +msgstr "" + +#: stock/admin.py:64 stock/templates/stock/location.html:131 +#: stock/templates/stock/location.html:137 +msgid "Location Path" +msgstr "" + +#: stock/admin.py:149 +msgid "Stock Item ID" +msgstr "" + +#: stock/admin.py:168 +msgid "Status Code" +msgstr "" + +#: stock/admin.py:180 +msgid "Supplier Part ID" +msgstr "" + +#: stock/admin.py:185 +msgid "Supplier ID" +msgstr "" + +#: stock/admin.py:191 +msgid "Supplier Name" +msgstr "" + +#: stock/admin.py:196 +msgid "Customer ID" +msgstr "" + +#: stock/admin.py:201 stock/models.py:806 +#: stock/templates/stock/item_base.html:354 +msgid "Installed In" +msgstr "" + +#: stock/admin.py:206 +msgid "Build ID" +msgstr "" + +#: stock/admin.py:216 +msgid "Sales Order ID" +msgstr "" + +#: stock/admin.py:221 +msgid "Purchase Order ID" +msgstr "" + +#: stock/admin.py:236 +msgid "Review Needed" +msgstr "" + +#: stock/admin.py:241 +msgid "Delete on Deplete" +msgstr "" + +#: stock/admin.py:256 stock/models.py:900 +#: stock/templates/stock/item_base.html:433 +#: templates/js/translated/stock.js:2230 users/models.py:124 +msgid "Expiry Date" +msgstr "" + +#: stock/api.py:318 +msgid "Filter by location depth" +msgstr "" + +#: stock/api.py:338 +msgid "Include sub-locations in filtered results" +msgstr "" + +#: stock/api.py:359 +msgid "Parent Location" +msgstr "" + +#: stock/api.py:360 +msgid "Filter by parent location" +msgstr "" + +#: stock/api.py:615 templates/js/translated/table_filters.js:427 +msgid "External Location" +msgstr "" + +#: stock/api.py:803 +msgid "Part Tree" +msgstr "" + +#: stock/api.py:833 +msgid "Expiry date before" +msgstr "" + +#: stock/api.py:837 +msgid "Expiry date after" +msgstr "" + +#: stock/api.py:840 stock/templates/stock/item_base.html:439 +#: templates/js/translated/table_filters.js:441 +msgid "Stale" +msgstr "" + +#: stock/api.py:927 +msgid "Quantity is required" +msgstr "" + +#: stock/api.py:933 +msgid "Valid part must be supplied" +msgstr "" + +#: stock/api.py:964 +msgid "The given supplier part does not exist" +msgstr "" + +#: stock/api.py:974 +msgid "The supplier part has a pack size defined, but flag use_pack_size not set" +msgstr "" + +#: stock/api.py:1005 +msgid "Serial numbers cannot be supplied for a non-trackable part" +msgstr "" + +#: stock/models.py:59 +msgid "Stock Location type" +msgstr "" + +#: stock/models.py:60 +msgid "Stock Location types" +msgstr "" + +#: stock/models.py:86 +msgid "Default icon for all locations that have no icon set (optional)" +msgstr "" + +#: stock/models.py:123 stock/models.py:788 +#: stock/templates/stock/location.html:17 +#: stock/templates/stock/stock_app_base.html:8 +msgid "Stock Location" +msgstr "" + +#: stock/models.py:124 stock/templates/stock/location.html:186 +#: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 +#: users/models.py:205 +msgid "Stock Locations" +msgstr "" + +#: stock/models.py:166 stock/models.py:949 +#: stock/templates/stock/item_base.html:247 +msgid "Owner" +msgstr "" + +#: stock/models.py:167 stock/models.py:950 +msgid "Select Owner" +msgstr "" + +#: stock/models.py:175 +msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." +msgstr "" + +#: stock/models.py:182 templates/js/translated/stock.js:2781 +#: templates/js/translated/table_filters.js:243 +msgid "External" +msgstr "" + +#: stock/models.py:183 +msgid "This is an external stock location" +msgstr "" + +#: stock/models.py:189 templates/js/translated/stock.js:2790 +#: templates/js/translated/table_filters.js:246 +msgid "Location type" +msgstr "" + +#: stock/models.py:193 +msgid "Stock location type of this location" +msgstr "" + +#: stock/models.py:262 +msgid "You cannot make this stock location structural because some stock items are already located into it!" +msgstr "" + +#: stock/models.py:643 +msgid "Stock items cannot be located into structural stock locations!" +msgstr "" + +#: stock/models.py:670 stock/serializers.py:419 +msgid "Stock item cannot be created for virtual parts" +msgstr "" + +#: stock/models.py:687 +#, python-brace-format +msgid "Part type ('{self.supplier_part.part}') must be {self.part}" +msgstr "" + +#: stock/models.py:697 stock/models.py:710 +msgid "Quantity must be 1 for item with a serial number" +msgstr "" + +#: stock/models.py:700 +msgid "Serial number cannot be set if quantity greater than 1" +msgstr "" + +#: stock/models.py:724 +msgid "Item cannot belong to itself" +msgstr "" + +#: stock/models.py:729 +msgid "Item must have a build reference if is_building=True" +msgstr "" + +#: stock/models.py:742 +msgid "Build reference does not point to the same part object" +msgstr "" + +#: stock/models.py:758 +msgid "Parent Stock Item" +msgstr "" + +#: stock/models.py:770 +msgid "Base part" +msgstr "" + +#: stock/models.py:780 +msgid "Select a matching supplier part for this stock item" +msgstr "" + +#: stock/models.py:792 +msgid "Where is this stock item located?" +msgstr "" + +#: stock/models.py:800 stock/serializers.py:1480 +msgid "Packaging this stock item is stored in" +msgstr "" + +#: stock/models.py:811 +msgid "Is this item installed in another item?" +msgstr "" + +#: stock/models.py:830 +msgid "Serial number for this item" +msgstr "" + +#: stock/models.py:844 stock/serializers.py:1463 +msgid "Batch code for this stock item" +msgstr "" + +#: stock/models.py:849 +msgid "Stock Quantity" +msgstr "" + +#: stock/models.py:859 +msgid "Source Build" +msgstr "" + +#: stock/models.py:862 +msgid "Build for this stock item" +msgstr "" + +#: stock/models.py:869 stock/templates/stock/item_base.html:363 +msgid "Consumed By" +msgstr "" + +#: stock/models.py:872 +msgid "Build order which consumed this stock item" +msgstr "" + +#: stock/models.py:881 +msgid "Source Purchase Order" +msgstr "" + +#: stock/models.py:885 +msgid "Purchase order for this stock item" +msgstr "" + +#: stock/models.py:891 +msgid "Destination Sales Order" +msgstr "" + +#: stock/models.py:902 +msgid "Expiry date for stock item. Stock will be considered expired after this date" +msgstr "" + +#: stock/models.py:920 +msgid "Delete on deplete" +msgstr "" + +#: stock/models.py:921 +msgid "Delete this Stock Item when stock is depleted" +msgstr "" + +#: stock/models.py:941 +msgid "Single unit purchase price at time of purchase" +msgstr "" + +#: stock/models.py:972 +msgid "Converted to part" +msgstr "" + +#: stock/models.py:1490 +msgid "Part is not set as trackable" +msgstr "" + +#: stock/models.py:1496 +msgid "Quantity must be integer" +msgstr "" + +#: stock/models.py:1504 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({self.quantity})" +msgstr "" + +#: stock/models.py:1510 +msgid "Serial numbers must be a list of integers" +msgstr "" + +#: stock/models.py:1515 +msgid "Quantity does not match serial numbers" +msgstr "" + +#: stock/models.py:1523 stock/serializers.py:658 +msgid "Serial numbers already exist" +msgstr "" + +#: stock/models.py:1620 +msgid "Test template does not exist" +msgstr "" + +#: stock/models.py:1638 +msgid "Stock item has been assigned to a sales order" +msgstr "" + +#: stock/models.py:1642 +msgid "Stock item is installed in another item" +msgstr "" + +#: stock/models.py:1645 +msgid "Stock item contains other items" +msgstr "" + +#: stock/models.py:1648 +msgid "Stock item has been assigned to a customer" +msgstr "" + +#: stock/models.py:1651 +msgid "Stock item is currently in production" +msgstr "" + +#: stock/models.py:1654 +msgid "Serialized stock cannot be merged" +msgstr "" + +#: stock/models.py:1661 stock/serializers.py:1369 +msgid "Duplicate stock items" +msgstr "" + +#: stock/models.py:1665 +msgid "Stock items must refer to the same part" +msgstr "" + +#: stock/models.py:1673 +msgid "Stock items must refer to the same supplier part" +msgstr "" + +#: stock/models.py:1678 +msgid "Stock status codes must match" +msgstr "" + +#: stock/models.py:1905 +msgid "StockItem cannot be moved as it is not in stock" +msgstr "" + +#: stock/models.py:2326 +msgid "Entry notes" +msgstr "" + +#: stock/models.py:2391 +msgid "Value must be provided for this test" +msgstr "" + +#: stock/models.py:2396 +msgid "Attachment must be uploaded for this test" +msgstr "" + +#: stock/models.py:2423 +msgid "Test result" +msgstr "" + +#: stock/models.py:2430 +msgid "Test output value" +msgstr "" + +#: stock/models.py:2438 +msgid "Test result attachment" +msgstr "" + +#: stock/models.py:2442 +msgid "Test notes" +msgstr "" + +#: stock/models.py:2450 templates/js/translated/stock.js:1548 +msgid "Test station" +msgstr "" + +#: stock/models.py:2451 +msgid "The identifier of the test station where the test was performed" +msgstr "" + +#: stock/models.py:2457 +msgid "Started" +msgstr "" + +#: stock/models.py:2458 +msgid "The timestamp of the test start" +msgstr "" + +#: stock/models.py:2464 +msgid "Finished" +msgstr "" + +#: stock/models.py:2465 +msgid "The timestamp of the test finish" +msgstr "" + +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 +msgid "Test template for this result" +msgstr "" + +#: stock/serializers.py:248 +msgid "Template ID or test name must be provided" +msgstr "" + +#: stock/serializers.py:280 +msgid "The test finished time cannot be earlier than the test started time" +msgstr "" + +#: stock/serializers.py:313 +msgid "Serial number is too large" +msgstr "" + +#: stock/serializers.py:411 +msgid "Use pack size when adding: the quantity defined is the number of packs" +msgstr "" + +#: stock/serializers.py:531 +msgid "Purchase price of this stock item, per unit or pack" +msgstr "" + +#: stock/serializers.py:593 +msgid "Enter number of stock items to serialize" +msgstr "" + +#: stock/serializers.py:606 +#, python-brace-format +msgid "Quantity must not exceed available stock quantity ({q})" +msgstr "" + +#: stock/serializers.py:613 +msgid "Enter serial numbers for new items" +msgstr "" + +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 +msgid "Destination stock location" +msgstr "" + +#: stock/serializers.py:631 +msgid "Optional note field" +msgstr "" + +#: stock/serializers.py:641 +msgid "Serial numbers cannot be assigned to this part" +msgstr "" + +#: stock/serializers.py:696 +msgid "Select stock item to install" +msgstr "" + +#: stock/serializers.py:703 +msgid "Quantity to Install" +msgstr "" + +#: stock/serializers.py:704 +msgid "Enter the quantity of items to install" +msgstr "" + +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 +msgid "Add transaction note (optional)" +msgstr "" + +#: stock/serializers.py:717 +msgid "Quantity to install must be at least 1" +msgstr "" + +#: stock/serializers.py:725 +msgid "Stock item is unavailable" +msgstr "" + +#: stock/serializers.py:736 +msgid "Selected part is not in the Bill of Materials" +msgstr "" + +#: stock/serializers.py:749 +msgid "Quantity to install must not exceed available quantity" +msgstr "" + +#: stock/serializers.py:784 +msgid "Destination location for uninstalled item" +msgstr "" + +#: stock/serializers.py:819 +msgid "Select part to convert stock item into" +msgstr "" + +#: stock/serializers.py:832 +msgid "Selected part is not a valid option for conversion" +msgstr "" + +#: stock/serializers.py:849 +msgid "Cannot convert stock item with assigned SupplierPart" +msgstr "" + +#: stock/serializers.py:880 +msgid "Destination location for returned item" +msgstr "" + +#: stock/serializers.py:917 +msgid "Select stock items to change status" +msgstr "" + +#: stock/serializers.py:923 +msgid "No stock items selected" +msgstr "" + +#: stock/serializers.py:1019 stock/serializers.py:1082 +#: stock/templates/stock/location.html:165 +#: stock/templates/stock/location.html:220 +#: stock/templates/stock/location_sidebar.html:5 +msgid "Sublocations" +msgstr "" + +#: stock/serializers.py:1198 +msgid "Part must be salable" +msgstr "" + +#: stock/serializers.py:1202 +msgid "Item is allocated to a sales order" +msgstr "" + +#: stock/serializers.py:1206 +msgid "Item is allocated to a build order" +msgstr "" + +#: stock/serializers.py:1230 +msgid "Customer to assign stock items" +msgstr "" + +#: stock/serializers.py:1236 +msgid "Selected company is not a customer" +msgstr "" + +#: stock/serializers.py:1244 +msgid "Stock assignment notes" +msgstr "" + +#: stock/serializers.py:1254 stock/serializers.py:1508 +msgid "A list of stock items must be provided" +msgstr "" + +#: stock/serializers.py:1333 +msgid "Stock merging notes" +msgstr "" + +#: stock/serializers.py:1338 +msgid "Allow mismatched suppliers" +msgstr "" + +#: stock/serializers.py:1339 +msgid "Allow stock items with different supplier parts to be merged" +msgstr "" + +#: stock/serializers.py:1344 +msgid "Allow mismatched status" +msgstr "" + +#: stock/serializers.py:1345 +msgid "Allow stock items with different status codes to be merged" +msgstr "" + +#: stock/serializers.py:1355 +msgid "At least two stock items must be provided" +msgstr "" + +#: stock/serializers.py:1422 +msgid "No Change" +msgstr "" + +#: stock/serializers.py:1451 +msgid "StockItem primary key value" +msgstr "" + +#: stock/serializers.py:1470 +msgid "Stock item status code" +msgstr "" + +#: stock/serializers.py:1498 +msgid "Stock transaction notes" +msgstr "" + +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + +#: stock/templates/stock/item.html:17 +msgid "Stock Tracking Information" +msgstr "" + +#: stock/templates/stock/item.html:63 +msgid "Child Stock Items" +msgstr "" + +#: stock/templates/stock/item.html:72 +msgid "This stock item does not have any child items" +msgstr "" + +#: stock/templates/stock/item.html:81 +#: stock/templates/stock/stock_sidebar.html:12 +msgid "Test Data" +msgstr "" + +#: stock/templates/stock/item.html:85 stock/templates/stock/item_base.html:65 +msgid "Test Report" +msgstr "" + +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 +msgid "Delete Test Data" +msgstr "" + +#: stock/templates/stock/item.html:93 +msgid "Add Test Data" +msgstr "" + +#: stock/templates/stock/item.html:125 +msgid "Stock Item Notes" +msgstr "" + +#: stock/templates/stock/item.html:140 +msgid "Installed Stock Items" +msgstr "" + +#: stock/templates/stock/item.html:145 templates/js/translated/stock.js:3271 +msgid "Install Stock Item" +msgstr "" + +#: stock/templates/stock/item.html:272 +msgid "Delete all test results for this stock item" +msgstr "" + +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 +msgid "Add Test Result" +msgstr "" + +#: stock/templates/stock/item_base.html:33 +msgid "Locate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:51 +msgid "Scan to Location" +msgstr "" + +#: stock/templates/stock/item_base.html:59 +#: stock/templates/stock/location.html:70 +#: templates/js/translated/filters.js:431 +msgid "Printing actions" +msgstr "" + +#: stock/templates/stock/item_base.html:75 +msgid "Stock adjustment actions" +msgstr "" + +#: stock/templates/stock/item_base.html:79 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 +msgid "Count stock" +msgstr "" + +#: stock/templates/stock/item_base.html:81 +#: templates/js/translated/stock.js:1806 +msgid "Add stock" +msgstr "" + +#: stock/templates/stock/item_base.html:82 +#: templates/js/translated/stock.js:1815 +msgid "Remove stock" +msgstr "" + +#: stock/templates/stock/item_base.html:85 +msgid "Serialize stock" +msgstr "" + +#: stock/templates/stock/item_base.html:88 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 +msgid "Transfer stock" +msgstr "" + +#: stock/templates/stock/item_base.html:91 +#: templates/js/translated/stock.js:1887 +msgid "Assign to customer" +msgstr "" + +#: stock/templates/stock/item_base.html:94 +msgid "Return to stock" +msgstr "" + +#: stock/templates/stock/item_base.html:97 +msgid "Uninstall stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:97 +msgid "Uninstall" +msgstr "" + +#: stock/templates/stock/item_base.html:101 +msgid "Install stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:101 +msgid "Install" +msgstr "" + +#: stock/templates/stock/item_base.html:115 +msgid "Convert to variant" +msgstr "" + +#: stock/templates/stock/item_base.html:118 +msgid "Duplicate stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:120 +msgid "Edit stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:123 +msgid "Delete stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 +msgid "Build" +msgstr "" + +#: stock/templates/stock/item_base.html:193 +msgid "Parent Item" +msgstr "" + +#: stock/templates/stock/item_base.html:211 +msgid "No manufacturer set" +msgstr "" + +#: stock/templates/stock/item_base.html:251 +msgid "You are not in the list of owners of this item. This stock item cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:252 +#: stock/templates/stock/location.html:149 +msgid "Read only" +msgstr "" + +#: stock/templates/stock/item_base.html:265 +msgid "This stock item is unavailable" +msgstr "" + +#: stock/templates/stock/item_base.html:271 +msgid "This stock item is in production and cannot be edited." +msgstr "" + +#: stock/templates/stock/item_base.html:272 +msgid "Edit the stock item from the build view." +msgstr "" + +#: stock/templates/stock/item_base.html:287 +msgid "This stock item is allocated to Sales Order" +msgstr "" + +#: stock/templates/stock/item_base.html:295 +msgid "This stock item is allocated to Build Order" +msgstr "" + +#: stock/templates/stock/item_base.html:311 +msgid "This stock item is serialized. It has a unique serial number and the quantity cannot be adjusted" +msgstr "" + +#: stock/templates/stock/item_base.html:317 +msgid "previous page" +msgstr "" + +#: stock/templates/stock/item_base.html:317 +msgid "Navigate to previous serial number" +msgstr "" + +#: stock/templates/stock/item_base.html:326 +msgid "next page" +msgstr "" + +#: stock/templates/stock/item_base.html:326 +msgid "Navigate to next serial number" +msgstr "" + +#: stock/templates/stock/item_base.html:340 +msgid "Available Quantity" +msgstr "" + +#: stock/templates/stock/item_base.html:398 +#: templates/js/translated/build.js:2380 +msgid "No location set" +msgstr "" + +#: stock/templates/stock/item_base.html:413 +msgid "Tests" +msgstr "" + +#: stock/templates/stock/item_base.html:419 +msgid "This stock item has not passed all required tests" +msgstr "" + +#: stock/templates/stock/item_base.html:437 +#, python-format +msgid "This StockItem expired on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:437 +#: templates/js/translated/table_filters.js:435 users/models.py:174 +msgid "Expired" +msgstr "" + +#: stock/templates/stock/item_base.html:439 +#, python-format +msgid "This StockItem expires on %(item.expiry_date)s" +msgstr "" + +#: stock/templates/stock/item_base.html:455 +msgid "No stocktake performed" +msgstr "" + +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 +msgid "stock item" +msgstr "" + +#: stock/templates/stock/item_base.html:527 +msgid "Edit Stock Status" +msgstr "" + +#: stock/templates/stock/item_base.html:536 +msgid "Stock Item QR Code" +msgstr "" + +#: stock/templates/stock/item_base.html:547 +msgid "Link Barcode to Stock Item" +msgstr "" + +#: stock/templates/stock/item_base.html:611 +msgid "Select one of the part variants listed below." +msgstr "" + +#: stock/templates/stock/item_base.html:614 +msgid "Warning" +msgstr "" + +#: stock/templates/stock/item_base.html:615 +msgid "This action cannot be easily undone" +msgstr "" + +#: stock/templates/stock/item_base.html:623 +msgid "Convert Stock Item" +msgstr "" + +#: stock/templates/stock/item_base.html:657 +msgid "Return to Stock" +msgstr "" + +#: stock/templates/stock/item_serialize.html:5 +msgid "Create serialized items from this stock item." +msgstr "" + +#: stock/templates/stock/item_serialize.html:7 +msgid "Select quantity to serialize, and unique serial numbers." +msgstr "" + +#: stock/templates/stock/location.html:38 +msgid "Perform stocktake for this stock location" +msgstr "" + +#: stock/templates/stock/location.html:45 +msgid "Locate stock location" +msgstr "" + +#: stock/templates/stock/location.html:63 +msgid "Scan stock items into this location" +msgstr "" + +#: stock/templates/stock/location.html:63 +msgid "Scan In Stock Items" +msgstr "" + +#: stock/templates/stock/location.html:64 +msgid "Scan stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:64 +msgid "Scan In Container" +msgstr "" + +#: stock/templates/stock/location.html:75 +msgid "Print Location Report" +msgstr "" + +#: stock/templates/stock/location.html:104 +msgid "Location actions" +msgstr "" + +#: stock/templates/stock/location.html:106 +msgid "Edit location" +msgstr "" + +#: stock/templates/stock/location.html:108 +msgid "Delete location" +msgstr "" + +#: stock/templates/stock/location.html:138 +msgid "Top level stock location" +msgstr "" + +#: stock/templates/stock/location.html:144 +msgid "Location Owner" +msgstr "" + +#: stock/templates/stock/location.html:148 +msgid "You are not in the list of owners of this location. This stock location cannot be edited." +msgstr "" + +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 +msgid "Create new stock location" +msgstr "" + +#: stock/templates/stock/location.html:225 +msgid "New Location" +msgstr "" + +#: stock/templates/stock/location.html:295 +#: templates/js/translated/stock.js:2572 +msgid "stock location" +msgstr "" + +#: stock/templates/stock/location.html:317 +msgid "Scanned stock container into this location" +msgstr "" + +#: stock/templates/stock/location.html:390 +msgid "Stock Location QR Code" +msgstr "" + +#: stock/templates/stock/location.html:401 +msgid "Link Barcode to Stock Location" +msgstr "" + +#: stock/templates/stock/stock_app_base.html:16 +msgid "Loading..." +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:5 +msgid "Stock Tracking" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:8 +msgid "Allocations" +msgstr "" + +#: stock/templates/stock/stock_sidebar.html:20 +msgid "Child Items" +msgstr "" + +#: templates/403.html:6 templates/403.html:12 templates/403_csrf.html:7 +msgid "Permission Denied" +msgstr "" + +#: templates/403.html:15 +msgid "You do not have permission to view this page." +msgstr "" + +#: templates/403_csrf.html:11 +msgid "Authentication Failure" +msgstr "" + +#: templates/403_csrf.html:14 +msgid "You have been logged out from InvenTree." +msgstr "" + +#: templates/403_csrf.html:19 templates/InvenTree/settings/sidebar.html:29 +#: templates/navbar.html:150 +msgid "Login" +msgstr "" + +#: templates/404.html:6 templates/404.html:12 +msgid "Page Not Found" +msgstr "" + +#: templates/404.html:15 +msgid "The requested page does not exist" +msgstr "" + +#: templates/500.html:6 templates/500.html:12 +msgid "Internal Server Error" +msgstr "" + +#: templates/500.html:15 +#, python-format +msgid "The %(inventree_title)s server raised an internal error" +msgstr "" + +#: templates/500.html:16 +msgid "Refer to the error log in the admin interface for further details" +msgstr "" + +#: templates/503.html:11 templates/503.html:33 +msgid "Site is in Maintenance" +msgstr "" + +#: templates/503.html:39 +msgid "The site is currently in maintenance and should be up again soon!" +msgstr "" + +#: templates/InvenTree/index.html:7 +msgid "Index" +msgstr "" + +#: templates/InvenTree/index.html:39 +msgid "Subscribed Parts" +msgstr "" + +#: templates/InvenTree/index.html:52 +msgid "Subscribed Categories" +msgstr "" + +#: templates/InvenTree/index.html:62 +msgid "Latest Parts" +msgstr "" + +#: templates/InvenTree/index.html:77 +msgid "BOM Waiting Validation" +msgstr "" + +#: templates/InvenTree/index.html:106 +msgid "Recently Updated" +msgstr "" + +#: templates/InvenTree/index.html:134 +msgid "Depleted Stock" +msgstr "" + +#: templates/InvenTree/index.html:148 +msgid "Required for Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:156 +msgid "Expired Stock" +msgstr "" + +#: templates/InvenTree/index.html:172 +msgid "Stale Stock" +msgstr "" + +#: templates/InvenTree/index.html:199 +msgid "Build Orders In Progress" +msgstr "" + +#: templates/InvenTree/index.html:210 +msgid "Overdue Build Orders" +msgstr "" + +#: templates/InvenTree/index.html:230 +msgid "Outstanding Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:241 +msgid "Overdue Purchase Orders" +msgstr "" + +#: templates/InvenTree/index.html:262 +msgid "Outstanding Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:273 +msgid "Overdue Sales Orders" +msgstr "" + +#: templates/InvenTree/index.html:299 +msgid "InvenTree News" +msgstr "" + +#: templates/InvenTree/index.html:301 +msgid "Current News" +msgstr "" + +#: templates/InvenTree/notifications/history.html:9 +msgid "Notification History" +msgstr "" + +#: templates/InvenTree/notifications/history.html:13 +#: templates/InvenTree/notifications/history.html:14 +#: templates/InvenTree/notifications/notifications.html:75 +msgid "Delete Notifications" +msgstr "" + +#: templates/InvenTree/notifications/inbox.html:9 +msgid "Pending Notifications" +msgstr "" + +#: templates/InvenTree/notifications/inbox.html:13 +#: templates/InvenTree/notifications/inbox.html:14 +msgid "Mark all as read" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:10 +#: templates/InvenTree/notifications/sidebar.html:5 +#: templates/InvenTree/settings/sidebar.html:17 +#: templates/InvenTree/settings/sidebar.html:37 templates/notifications.html:5 +msgid "Notifications" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:38 +msgid "No unread notifications found" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:58 +msgid "No notification history found" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:65 +msgid "Delete all read notifications" +msgstr "" + +#: templates/InvenTree/notifications/notifications.html:89 +#: templates/js/translated/notification.js:85 +msgid "Delete Notification" +msgstr "" + +#: templates/InvenTree/notifications/sidebar.html:8 +msgid "Inbox" +msgstr "" + +#: templates/InvenTree/notifications/sidebar.html:10 +msgid "History" +msgstr "" + +#: templates/InvenTree/search.html:8 +msgid "Search Results" +msgstr "" + +#: templates/InvenTree/settings/barcode.html:8 +msgid "Barcode Settings" +msgstr "" + +#: templates/InvenTree/settings/build.html:8 +msgid "Build Order Settings" +msgstr "" + +#: templates/InvenTree/settings/category.html:7 +msgid "Category Settings" +msgstr "" + +#: templates/InvenTree/settings/global.html:8 +msgid "Server Settings" +msgstr "" + +#: templates/InvenTree/settings/label.html:8 +#: templates/InvenTree/settings/user_labels.html:9 +msgid "Label Settings" +msgstr "" + +#: templates/InvenTree/settings/login.html:8 +msgid "Login Settings" +msgstr "" + +#: templates/InvenTree/settings/login.html:15 +msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" +msgstr "" + +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 +#: templates/socialaccount/signup.html:5 +msgid "Signup" +msgstr "" + +#: templates/InvenTree/settings/login.html:36 +msgid "Single Sign On" +msgstr "" + +#: templates/InvenTree/settings/mixins/settings.html:5 +#: templates/InvenTree/settings/settings.html:12 templates/navbar.html:147 +msgid "Settings" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:5 +msgid "URLs" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:8 +#, python-format +msgid "The Base-URL for this plugin is %(base)s." +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:14 +msgid "URL" +msgstr "" + +#: templates/InvenTree/settings/mixins/urls.html:23 +msgid "Open in new tab" +msgstr "" + +#: templates/InvenTree/settings/notifications.html:9 +#: templates/InvenTree/settings/user_notifications.html:9 +msgid "Notification Settings" +msgstr "" + +#: templates/InvenTree/settings/notifications.html:18 +msgid "Slug" +msgstr "" + +#: templates/InvenTree/settings/part.html:7 +msgid "Part Settings" +msgstr "" + +#: templates/InvenTree/settings/part.html:43 +msgid "Part Import" +msgstr "" + +#: templates/InvenTree/settings/part.html:47 +msgid "Import Part" +msgstr "" + +#: templates/InvenTree/settings/part_parameters.html:20 +msgid "Part Parameter Templates" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:7 +msgid "Stocktake Settings" +msgstr "" + +#: templates/InvenTree/settings/part_stocktake.html:25 +msgid "Stocktake Reports" +msgstr "" + +#: templates/InvenTree/settings/physical_units.html:8 +#: templates/InvenTree/settings/sidebar.html:35 +msgid "Physical Units" +msgstr "" + +#: templates/InvenTree/settings/physical_units.html:12 +msgid "Add Unit" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:9 +#: templates/InvenTree/settings/sidebar.html:64 +msgid "Plugin Settings" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:15 +msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." +msgstr "" + +#: templates/InvenTree/settings/plugin.html:38 +#: templates/InvenTree/settings/sidebar.html:66 +msgid "Plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 +#: templates/js/translated/plugin.js:151 +msgid "Install Plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 +#: templates/js/translated/plugin.js:224 +msgid "Reload Plugins" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:58 +msgid "External plugins are not enabled for this InvenTree installation" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:73 +msgid "Plugin Error Stack" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:82 +msgid "Stage" +msgstr "" + +#: templates/InvenTree/settings/plugin.html:84 +#: templates/js/translated/notification.js:76 +msgid "Message" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:16 +msgid "Plugin information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:47 +msgid "no version information supplied" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:61 +msgid "License" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:70 +msgid "The code information is pulled from the latest git commit for this plugin. It might not reflect official version numbers or information but the actual code running." +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:76 +msgid "Package information" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:82 +msgid "Installation method" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:85 +msgid "This plugin was installed as a package" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:87 +msgid "This plugin was found in a local server path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:93 +msgid "Installation path" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:100 +#: templates/js/translated/plugin.js:68 +#: templates/js/translated/table_filters.js:496 +msgid "Builtin" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:101 +msgid "This is a builtin plugin which cannot be disabled" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:107 +#: templates/js/translated/plugin.js:72 +#: templates/js/translated/table_filters.js:500 +msgid "Sample" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:108 +msgid "This is a sample plugin" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:113 +msgid "Commit Author" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:117 +#: templates/about.html:36 +msgid "Commit Date" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:121 +#: templates/about.html:29 +msgid "Commit Hash" +msgstr "" + +#: templates/InvenTree/settings/plugin_settings.html:125 +msgid "Commit Message" +msgstr "" + +#: templates/InvenTree/settings/po.html:7 +msgid "Purchase Order Settings" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:7 +msgid "Pricing Settings" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:34 +msgid "Exchange Rates" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:38 +msgid "Update Now" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:46 +#: templates/InvenTree/settings/pricing.html:50 +msgid "Last Update" +msgstr "" + +#: templates/InvenTree/settings/pricing.html:50 +msgid "Never" +msgstr "" + +#: templates/InvenTree/settings/project_codes.html:8 +msgid "Project Code Settings" +msgstr "" + +#: templates/InvenTree/settings/project_codes.html:21 +#: templates/InvenTree/settings/sidebar.html:33 +msgid "Project Codes" +msgstr "" + +#: templates/InvenTree/settings/project_codes.html:25 +#: templates/InvenTree/settings/settings_staff_js.html:216 +msgid "New Project Code" +msgstr "" + +#: templates/InvenTree/settings/report.html:8 +#: templates/InvenTree/settings/user_reporting.html:9 +msgid "Report Settings" +msgstr "" + +#: templates/InvenTree/settings/returns.html:7 +msgid "Return Order Settings" +msgstr "" + +#: templates/InvenTree/settings/setting.html:31 +msgid "No value set" +msgstr "" + +#: templates/InvenTree/settings/setting.html:46 +msgid "Edit setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:58 +msgid "Edit Plugin Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:60 +msgid "Edit Notification Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:63 +msgid "Edit Global Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_js.html:65 +msgid "Edit User Setting" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:49 +msgid "Rate" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:81 +#: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 +#: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 +#: templates/js/translated/stock.js:245 users/models.py:411 +msgid "Delete" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:95 +msgid "Edit Custom Unit" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:110 +msgid "Delete Custom Unit" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:124 +msgid "New Custom Unit" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:140 +msgid "No project codes found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:158 +#: templates/js/translated/build.js:2228 +msgid "group" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:175 +#: templates/InvenTree/settings/settings_staff_js.html:189 +msgid "Edit Project Code" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:176 +#: templates/InvenTree/settings/settings_staff_js.html:203 +msgid "Delete Project Code" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:285 +msgid "No category parameter templates found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:308 +#: templates/js/translated/part.js:1645 +msgid "Edit Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:309 +#: templates/js/translated/part.js:1646 +msgid "Delete Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:326 +msgid "Edit Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:353 +msgid "Delete Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:388 +msgid "Create Category Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:418 +msgid "Create Part Parameter Template" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:440 +msgid "No stock location types found" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:461 +msgid "Location count" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:466 +#: templates/InvenTree/settings/settings_staff_js.html:480 +msgid "Edit Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:467 +msgid "Delete Location type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:490 +msgid "Delete Location Type" +msgstr "" + +#: templates/InvenTree/settings/settings_staff_js.html:500 +#: templates/InvenTree/settings/stock.html:38 +msgid "New Location Type" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:6 +#: templates/InvenTree/settings/user_settings.html:9 +msgid "User Settings" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:9 +msgid "Account" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:11 +msgid "Display" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:13 +msgid "Home Page" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:15 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 +#: templates/navbar.html:107 templates/search.html:8 +#: templates/search_form.html:6 templates/search_form.html:7 +msgid "Search" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:19 +#: templates/InvenTree/settings/sidebar.html:43 +msgid "Reporting" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:24 +msgid "Global Settings" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:27 templates/stats.html:9 +msgid "Server" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:41 +msgid "Labels" +msgstr "" + +#: templates/InvenTree/settings/sidebar.html:45 +msgid "Categories" +msgstr "" + +#: templates/InvenTree/settings/so.html:7 +msgid "Sales Order Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:7 +msgid "Stock Settings" +msgstr "" + +#: templates/InvenTree/settings/stock.html:34 +msgid "Stock Location Types" +msgstr "" + +#: templates/InvenTree/settings/user.html:13 +msgid "Account Settings" +msgstr "" + +#: templates/InvenTree/settings/user.html:19 +#: templates/account/password_reset_from_key.html:4 +#: templates/account/password_reset_from_key.html:7 +msgid "Change Password" +msgstr "" + +#: templates/InvenTree/settings/user.html:33 +msgid "Username" +msgstr "" + +#: templates/InvenTree/settings/user.html:37 +msgid "First Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:41 +msgid "Last Name" +msgstr "" + +#: templates/InvenTree/settings/user.html:55 +msgid "The following email addresses are associated with your account:" +msgstr "" + +#: templates/InvenTree/settings/user.html:76 +msgid "Verified" +msgstr "" + +#: templates/InvenTree/settings/user.html:78 +msgid "Unverified" +msgstr "" + +#: templates/InvenTree/settings/user.html:80 +#: templates/js/translated/company.js:957 +msgid "Primary" +msgstr "" + +#: templates/InvenTree/settings/user.html:86 +msgid "Make Primary" +msgstr "" + +#: templates/InvenTree/settings/user.html:87 +msgid "Re-send Verification" +msgstr "" + +#: templates/InvenTree/settings/user.html:96 +msgid "Warning:" +msgstr "" + +#: templates/InvenTree/settings/user.html:97 +msgid "You currently do not have any email address set up. You should really add an email address so you can receive notifications, reset your password, etc." +msgstr "" + +#: templates/InvenTree/settings/user.html:105 +msgid "Add Email Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:110 +msgid "Add Email" +msgstr "" + +#: templates/InvenTree/settings/user.html:120 +msgid "Multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:125 +msgid "You have these factors available:" +msgstr "" + +#: templates/InvenTree/settings/user.html:135 +msgid "TOTP" +msgstr "" + +#: templates/InvenTree/settings/user.html:141 +msgid "Static" +msgstr "" + +#: templates/InvenTree/settings/user.html:150 +msgid "Multifactor authentication is not configured for your account" +msgstr "" + +#: templates/InvenTree/settings/user.html:157 +msgid "Change factors" +msgstr "" + +#: templates/InvenTree/settings/user.html:158 +msgid "Setup multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:160 +msgid "Remove multifactor" +msgstr "" + +#: templates/InvenTree/settings/user.html:171 +msgid "Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:177 +msgid "Log out active sessions (except this one)" +msgstr "" + +#: templates/InvenTree/settings/user.html:178 +msgid "Log Out Active Sessions" +msgstr "" + +#: templates/InvenTree/settings/user.html:187 +msgid "unknown on unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:188 +msgid "unknown" +msgstr "" + +#: templates/InvenTree/settings/user.html:192 +msgid "IP Address" +msgstr "" + +#: templates/InvenTree/settings/user.html:193 +msgid "Device" +msgstr "" + +#: templates/InvenTree/settings/user.html:194 +msgid "Last Activity" +msgstr "" + +#: templates/InvenTree/settings/user.html:207 +#, python-format +msgid "%(time)s ago (this session)" +msgstr "" + +#: templates/InvenTree/settings/user.html:209 +#, python-format +msgid "%(time)s ago" +msgstr "" + +#: templates/InvenTree/settings/user.html:223 +msgid "Do you really want to remove the selected email address?" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:9 +msgid "Display Settings" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:29 +msgid "Theme Settings" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:39 +msgid "Select theme" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:50 +msgid "Set Theme" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:58 +msgid "Language Settings" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:67 +msgid "Select language" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:83 +#, python-format +msgid "%(lang_translated)s%% translated" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:85 +msgid "No translations available" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:92 +msgid "Set Language" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:95 +msgid "Some languages are not complete" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:97 +msgid "Show only sufficient" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:99 +msgid "and hidden." +msgstr "" + +#: templates/InvenTree/settings/user_display.html:99 +msgid "Show them too" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:106 +msgid "Help the translation efforts!" +msgstr "" + +#: templates/InvenTree/settings/user_display.html:107 +msgid "Native language translation of the web application is community contributed via crowdin. Contributions are welcomed and encouraged." +msgstr "" + +#: templates/InvenTree/settings/user_display.html:108 +msgid "InvenTree Translation Project" +msgstr "" + +#: templates/InvenTree/settings/user_homepage.html:9 +msgid "Home Page Settings" +msgstr "" + +#: templates/InvenTree/settings/user_search.html:9 +msgid "Search Settings" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:9 +msgid "Single Sign On Accounts" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:16 +msgid "You can sign in to your account using any of the following third party accounts:" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:52 +msgid "There are no social network accounts connected to this account." +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:58 +msgid "Add SSO Account" +msgstr "" + +#: templates/InvenTree/settings/user_sso.html:67 +msgid "Single Sign On is not enabled for this server" +msgstr "" + +#: templates/about.html:9 +msgid "InvenTree Version" +msgstr "" + +#: templates/about.html:14 +msgid "Development Version" +msgstr "" + +#: templates/about.html:17 +msgid "Up to Date" +msgstr "" + +#: templates/about.html:19 +msgid "Update Available" +msgstr "" + +#: templates/about.html:43 +msgid "Commit Branch" +msgstr "" + +#: templates/about.html:49 +msgid "InvenTree Documentation" +msgstr "" + +#: templates/about.html:54 +msgid "API Version" +msgstr "" + +#: templates/about.html:59 +msgid "Python Version" +msgstr "" + +#: templates/about.html:64 +msgid "Django Version" +msgstr "" + +#: templates/about.html:69 +msgid "View Code on GitHub" +msgstr "" + +#: templates/about.html:74 +msgid "Credits" +msgstr "" + +#: templates/about.html:79 +msgid "Mobile App" +msgstr "" + +#: templates/about.html:84 +msgid "Submit Bug Report" +msgstr "" + +#: templates/about.html:91 templates/clip.html:4 +#: templates/js/translated/helpers.js:585 +msgid "copy to clipboard" +msgstr "" + +#: templates/about.html:91 +msgid "copy version information" +msgstr "" + +#: templates/account/base.html:66 templates/navbar.html:17 +msgid "InvenTree logo" +msgstr "" + +#: templates/account/email_confirm.html:6 +#: templates/account/email_confirm.html:9 +msgid "Confirm Email Address" +msgstr "" + +#: templates/account/email_confirm.html:15 +#, python-format +msgid "Please confirm that %(email)s is an email address for user %(user_display)s." +msgstr "" + +#: templates/account/email_confirm.html:21 templates/js/translated/forms.js:774 +msgid "Confirm" +msgstr "" + +#: templates/account/email_confirm.html:29 +#, python-format +msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." +msgstr "" + +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 +msgid "Sign In" +msgstr "" + +#: templates/account/login.html:23 +msgid "Not a member?" +msgstr "" + +#: templates/account/login.html:25 templates/account/signup.html:11 +#: templates/account/signup.html:22 templates/socialaccount/signup.html:8 +#: templates/socialaccount/signup.html:23 +msgid "Sign Up" +msgstr "" + +#: templates/account/login.html:47 +msgid "Forgot Password?" +msgstr "" + +#: templates/account/login.html:55 +msgid "or log in with" +msgstr "" + +#: templates/account/logout.html:5 templates/account/logout.html:8 +#: templates/account/logout.html:20 +msgid "Sign Out" +msgstr "" + +#: templates/account/logout.html:10 +msgid "Are you sure you want to sign out?" +msgstr "" + +#: templates/account/logout.html:27 templates/allauth_2fa/backup_tokens.html:35 +#: templates/allauth_2fa/remove.html:24 templates/allauth_2fa/setup.html:44 +msgid "Return to Site" +msgstr "" + +#: templates/account/password_reset.html:5 +#: templates/account/password_reset.html:12 +msgid "Password Reset" +msgstr "" + +#: templates/account/password_reset.html:18 +msgid "Forgotten your password? Enter your email address below, and we'll send you an email allowing you to reset it." +msgstr "" + +#: templates/account/password_reset.html:23 +msgid "Reset My Password" +msgstr "" + +#: templates/account/password_reset.html:27 templates/account/signup.html:37 +msgid "This function is currently disabled. Please contact an administrator." +msgstr "" + +#: templates/account/password_reset_from_key.html:7 +msgid "Bad Token" +msgstr "" + +#: templates/account/password_reset_from_key.html:11 +#, python-format +msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." +msgstr "" + +#: templates/account/password_reset_from_key.html:18 +msgid "Change password" +msgstr "" + +#: templates/account/password_reset_from_key.html:22 +msgid "Your password is now changed." +msgstr "" + +#: templates/account/signup.html:13 +#, python-format +msgid "Already have an account? Then please sign in." +msgstr "" + +#: templates/account/signup.html:28 +msgid "Use a SSO-provider for signup" +msgstr "" + +#: templates/account/signup_closed.html:5 +#: templates/account/signup_closed.html:8 +msgid "Sign Up Closed" +msgstr "" + +#: templates/account/signup_closed.html:10 +msgid "Sign up is currently closed." +msgstr "" + +#: templates/account/signup_closed.html:15 +#: templates/socialaccount/authentication_error.html:19 +#: templates/socialaccount/login.html:38 templates/socialaccount/signup.html:30 +msgid "Return to login page" +msgstr "" + +#: templates/admin_button.html:8 +msgid "View in administration panel" +msgstr "" + +#: templates/allauth_2fa/authenticate.html:5 +msgid "Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/authenticate.html:13 +msgid "Authenticate" +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:6 +msgid "Two-Factor Authentication Backup Tokens" +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:17 +msgid "Backup tokens have been generated, but are not revealed here for security reasons. Press the button below to generate new ones." +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:20 +msgid "No backup tokens are available. Press the button below to generate some." +msgstr "" + +#: templates/allauth_2fa/backup_tokens.html:28 +msgid "Generate Tokens" +msgstr "" + +#: templates/allauth_2fa/remove.html:6 +msgid "Disable Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/remove.html:9 +msgid "Are you sure?" +msgstr "" + +#: templates/allauth_2fa/remove.html:17 +msgid "Disable 2FA" +msgstr "" + +#: templates/allauth_2fa/setup.html:6 +msgid "Setup Two-Factor Authentication" +msgstr "" + +#: templates/allauth_2fa/setup.html:10 +msgid "Step 1" +msgstr "" + +#: templates/allauth_2fa/setup.html:14 +msgid "Scan the QR code below with a token generator of your choice (for instance Google Authenticator)." +msgstr "" + +#: templates/allauth_2fa/setup.html:23 +msgid "Step 2" +msgstr "" + +#: templates/allauth_2fa/setup.html:27 +msgid "Input a token generated by the app:" +msgstr "" + +#: templates/allauth_2fa/setup.html:37 +msgid "Verify" +msgstr "" + +#: templates/attachment_button.html:4 templates/js/translated/attachment.js:70 +msgid "Add Link" +msgstr "" + +#: templates/attachment_button.html:7 templates/js/translated/attachment.js:48 +msgid "Add Attachment" +msgstr "" + +#: templates/barcode_data.html:5 +msgid "Barcode Identifier" +msgstr "" + +#: templates/base.html:103 +msgid "Server Restart Required" +msgstr "" + +#: templates/base.html:106 +msgid "A configuration option has been changed which requires a server restart" +msgstr "" + +#: templates/base.html:106 templates/base.html:116 +msgid "Contact your system administrator for further information" +msgstr "" + +#: templates/base.html:113 +msgid "Pending Database Migrations" +msgstr "" + +#: templates/base.html:116 +msgid "There are pending database migrations which require attention" +msgstr "" + +#: templates/email/build_order_completed.html:9 +#: templates/email/canceled_order_assigned.html:9 +#: templates/email/new_order_assigned.html:9 +#: templates/email/overdue_build_order.html:9 +#: templates/email/overdue_purchase_order.html:9 +#: templates/email/overdue_sales_order.html:9 +#: templates/email/purchase_order_received.html:9 +#: templates/email/return_order_received.html:9 +msgid "Click on the following link to view this order" +msgstr "" + +#: templates/email/build_order_required_stock.html:7 +msgid "Stock is required for the following build order" +msgstr "" + +#: templates/email/build_order_required_stock.html:8 +#, python-format +msgid "Build order %(build)s - building %(quantity)s x %(part)s" +msgstr "" + +#: templates/email/build_order_required_stock.html:10 +msgid "Click on the following link to view this build order" +msgstr "" + +#: templates/email/build_order_required_stock.html:14 +msgid "The following parts are low on required stock" +msgstr "" + +#: templates/email/build_order_required_stock.html:18 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 +msgid "Required Quantity" +msgstr "" + +#: templates/email/build_order_required_stock.html:38 +#: templates/email/low_stock_notification.html:30 +msgid "You are receiving this email because you are subscribed to notifications for this part " +msgstr "" + +#: templates/email/low_stock_notification.html:9 +msgid "Click on the following link to view this part" +msgstr "" + +#: templates/email/low_stock_notification.html:18 +#: templates/js/translated/part.js:3217 +msgid "Minimum Quantity" +msgstr "" + +#: templates/js/translated/api.js:225 templates/js/translated/modals.js:1130 +msgid "No Response" +msgstr "" + +#: templates/js/translated/api.js:226 templates/js/translated/modals.js:1131 +msgid "No response from the InvenTree server" +msgstr "" + +#: templates/js/translated/api.js:232 +msgid "Error 400: Bad request" +msgstr "" + +#: templates/js/translated/api.js:233 +msgid "API request returned error code 400" +msgstr "" + +#: templates/js/translated/api.js:237 templates/js/translated/modals.js:1140 +msgid "Error 401: Not Authenticated" +msgstr "" + +#: templates/js/translated/api.js:238 templates/js/translated/modals.js:1141 +msgid "Authentication credentials not supplied" +msgstr "" + +#: templates/js/translated/api.js:242 templates/js/translated/modals.js:1145 +msgid "Error 403: Permission Denied" +msgstr "" + +#: templates/js/translated/api.js:243 templates/js/translated/modals.js:1146 +msgid "You do not have the required permissions to access this function" +msgstr "" + +#: templates/js/translated/api.js:247 templates/js/translated/modals.js:1150 +msgid "Error 404: Resource Not Found" +msgstr "" + +#: templates/js/translated/api.js:248 templates/js/translated/modals.js:1151 +msgid "The requested resource could not be located on the server" +msgstr "" + +#: templates/js/translated/api.js:252 +msgid "Error 405: Method Not Allowed" +msgstr "" + +#: templates/js/translated/api.js:253 +msgid "HTTP method not allowed at URL" +msgstr "" + +#: templates/js/translated/api.js:257 templates/js/translated/modals.js:1155 +msgid "Error 408: Timeout" +msgstr "" + +#: templates/js/translated/api.js:258 templates/js/translated/modals.js:1156 +msgid "Connection timeout while requesting data from server" +msgstr "" + +#: templates/js/translated/api.js:261 +msgid "Error 503: Service Unavailable" +msgstr "" + +#: templates/js/translated/api.js:262 +msgid "The server is currently unavailable" +msgstr "" + +#: templates/js/translated/api.js:265 +msgid "Unhandled Error Code" +msgstr "" + +#: templates/js/translated/api.js:266 +msgid "Error code" +msgstr "" + +#: templates/js/translated/attachment.js:114 +msgid "All selected attachments will be deleted" +msgstr "" + +#: templates/js/translated/attachment.js:129 +msgid "Delete Attachments" +msgstr "" + +#: templates/js/translated/attachment.js:205 +msgid "Delete attachments" +msgstr "" + +#: templates/js/translated/attachment.js:253 +msgid "Attachment actions" +msgstr "" + +#: templates/js/translated/attachment.js:275 +msgid "No attachments found" +msgstr "" + +#: templates/js/translated/attachment.js:315 +msgid "Edit Attachment" +msgstr "" + +#: templates/js/translated/attachment.js:346 +msgid "Upload Date" +msgstr "" + +#: templates/js/translated/attachment.js:366 +msgid "Edit attachment" +msgstr "" + +#: templates/js/translated/attachment.js:374 +msgid "Delete attachment" +msgstr "" + +#: templates/js/translated/barcode.js:43 +msgid "Scan barcode data here using barcode scanner" +msgstr "" + +#: templates/js/translated/barcode.js:45 +msgid "Enter barcode data" +msgstr "" + +#: templates/js/translated/barcode.js:59 +msgid "Scan barcode using connected webcam" +msgstr "" + +#: templates/js/translated/barcode.js:138 +msgid "Enter optional notes for stock transfer" +msgstr "" + +#: templates/js/translated/barcode.js:139 +msgid "Enter notes" +msgstr "" + +#: templates/js/translated/barcode.js:188 +msgid "Server error" +msgstr "" + +#: templates/js/translated/barcode.js:217 +msgid "Unknown response from server" +msgstr "" + +#: templates/js/translated/barcode.js:252 +#: templates/js/translated/modals.js:1120 +msgid "Invalid server response" +msgstr "" + +#: templates/js/translated/barcode.js:372 +msgid "Scan barcode data" +msgstr "" + +#: templates/js/translated/barcode.js:420 templates/navbar.html:114 +msgid "Scan Barcode" +msgstr "" + +#: templates/js/translated/barcode.js:458 +msgid "No URL in response" +msgstr "" + +#: templates/js/translated/barcode.js:498 +msgid "This will remove the link to the associated barcode" +msgstr "" + +#: templates/js/translated/barcode.js:504 +msgid "Unlink" +msgstr "" + +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 +msgid "Remove stock item" +msgstr "" + +#: templates/js/translated/barcode.js:610 +msgid "Scan Stock Items Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:612 +msgid "Scan stock item barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:615 +#: templates/js/translated/barcode.js:812 +msgid "Check In" +msgstr "" + +#: templates/js/translated/barcode.js:647 +msgid "No barcode provided" +msgstr "" + +#: templates/js/translated/barcode.js:687 +msgid "Stock Item already scanned" +msgstr "" + +#: templates/js/translated/barcode.js:691 +msgid "Stock Item already in this location" +msgstr "" + +#: templates/js/translated/barcode.js:698 +msgid "Added stock item" +msgstr "" + +#: templates/js/translated/barcode.js:707 +msgid "Barcode does not match valid stock item" +msgstr "" + +#: templates/js/translated/barcode.js:726 +msgid "Scan Stock Container Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:728 +msgid "Scan stock container barcode to check in to this location" +msgstr "" + +#: templates/js/translated/barcode.js:762 +msgid "Barcode does not match valid stock location" +msgstr "" + +#: templates/js/translated/barcode.js:806 +msgid "Check Into Location" +msgstr "" + +#: templates/js/translated/barcode.js:875 +#: templates/js/translated/barcode.js:884 +msgid "Barcode does not match a valid location" +msgstr "" + +#: templates/js/translated/bom.js:78 +msgid "Create BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:132 +msgid "Display row data" +msgstr "" + +#: templates/js/translated/bom.js:188 +msgid "Row Data" +msgstr "" + +#: templates/js/translated/bom.js:189 templates/js/translated/bom.js:700 +#: templates/js/translated/modals.js:74 templates/js/translated/modals.js:628 +#: templates/js/translated/modals.js:752 templates/js/translated/modals.js:1060 +#: templates/js/translated/purchase_order.js:797 templates/modals.html:15 +#: templates/modals.html:27 templates/modals.html:39 templates/modals.html:50 +msgid "Close" +msgstr "" + +#: templates/js/translated/bom.js:306 +msgid "Download BOM Template" +msgstr "" + +#: templates/js/translated/bom.js:351 +msgid "Multi Level BOM" +msgstr "" + +#: templates/js/translated/bom.js:352 +msgid "Include BOM data for subassemblies" +msgstr "" + +#: templates/js/translated/bom.js:357 +msgid "Levels" +msgstr "" + +#: templates/js/translated/bom.js:358 +msgid "Select maximum number of BOM levels to export (0 = all levels)" +msgstr "" + +#: templates/js/translated/bom.js:365 +msgid "Include Alternative Parts" +msgstr "" + +#: templates/js/translated/bom.js:366 +msgid "Include alternative parts in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:371 +msgid "Include Parameter Data" +msgstr "" + +#: templates/js/translated/bom.js:372 +msgid "Include part parameter data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:377 +msgid "Include Stock Data" +msgstr "" + +#: templates/js/translated/bom.js:378 +msgid "Include part stock data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:383 +msgid "Include Manufacturer Data" +msgstr "" + +#: templates/js/translated/bom.js:384 +msgid "Include part manufacturer data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:389 +msgid "Include Supplier Data" +msgstr "" + +#: templates/js/translated/bom.js:390 +msgid "Include part supplier data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:395 +msgid "Include Pricing Data" +msgstr "" + +#: templates/js/translated/bom.js:396 +msgid "Include part pricing data in exported BOM" +msgstr "" + +#: templates/js/translated/bom.js:591 +msgid "Remove substitute part" +msgstr "" + +#: templates/js/translated/bom.js:645 +msgid "Select and add a new substitute part using the input below" +msgstr "" + +#: templates/js/translated/bom.js:656 +msgid "Are you sure you wish to remove this substitute part link?" +msgstr "" + +#: templates/js/translated/bom.js:662 +msgid "Remove Substitute Part" +msgstr "" + +#: templates/js/translated/bom.js:701 +msgid "Add Substitute" +msgstr "" + +#: templates/js/translated/bom.js:702 +msgid "Edit BOM Item Substitutes" +msgstr "" + +#: templates/js/translated/bom.js:764 +msgid "All selected BOM items will be deleted" +msgstr "" + +#: templates/js/translated/bom.js:780 +msgid "Delete selected BOM items?" +msgstr "" + +#: templates/js/translated/bom.js:826 +msgid "Delete items" +msgstr "" + +#: templates/js/translated/bom.js:936 +msgid "Load BOM for subassembly" +msgstr "" + +#: templates/js/translated/bom.js:946 +msgid "Substitutes Available" +msgstr "" + +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 +msgid "Variant stock allowed" +msgstr "" + +#: templates/js/translated/bom.js:1014 +msgid "Substitutes" +msgstr "" + +#: templates/js/translated/bom.js:1139 +msgid "BOM pricing is complete" +msgstr "" + +#: templates/js/translated/bom.js:1144 +msgid "BOM pricing is incomplete" +msgstr "" + +#: templates/js/translated/bom.js:1151 +msgid "No pricing available" +msgstr "" + +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 +msgid "External stock" +msgstr "" + +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 +msgid "No Stock Available" +msgstr "" + +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 +msgid "Includes variant and substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 +#: templates/js/translated/part.js:1256 +#: templates/js/translated/sales_order.js:1943 +msgid "Includes variant stock" +msgstr "" + +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 +msgid "Includes substitute stock" +msgstr "" + +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 +msgid "Consumable item" +msgstr "" + +#: templates/js/translated/bom.js:1285 +msgid "Validate BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1287 +msgid "This line has been validated" +msgstr "" + +#: templates/js/translated/bom.js:1289 +msgid "Edit substitute parts" +msgstr "" + +#: templates/js/translated/bom.js:1291 templates/js/translated/bom.js:1486 +msgid "Edit BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1293 +msgid "Delete BOM Item" +msgstr "" + +#: templates/js/translated/bom.js:1313 +msgid "View BOM" +msgstr "" + +#: templates/js/translated/bom.js:1397 +msgid "No BOM items found" +msgstr "" + +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 +msgid "Required Part" +msgstr "" + +#: templates/js/translated/bom.js:1683 +msgid "Inherited from parent BOM" +msgstr "" + +#: templates/js/translated/build.js:142 +msgid "Edit Build Order" +msgstr "" + +#: templates/js/translated/build.js:190 +msgid "Create Build Order" +msgstr "" + +#: templates/js/translated/build.js:222 +msgid "Cancel Build Order" +msgstr "" + +#: templates/js/translated/build.js:231 +msgid "Are you sure you wish to cancel this build?" +msgstr "" + +#: templates/js/translated/build.js:237 +msgid "Stock items have been allocated to this build order" +msgstr "" + +#: templates/js/translated/build.js:244 +msgid "There are incomplete outputs remaining for this build order" +msgstr "" + +#: templates/js/translated/build.js:296 +msgid "Build order is ready to be completed" +msgstr "" + +#: templates/js/translated/build.js:304 +msgid "This build order cannot be completed as there are incomplete outputs" +msgstr "" + +#: templates/js/translated/build.js:309 +msgid "Build Order is incomplete" +msgstr "" + +#: templates/js/translated/build.js:327 +msgid "Complete Build Order" +msgstr "" + +#: templates/js/translated/build.js:368 templates/js/translated/stock.js:119 +#: templates/js/translated/stock.js:294 +msgid "Next available serial number" +msgstr "" + +#: templates/js/translated/build.js:370 templates/js/translated/stock.js:121 +#: templates/js/translated/stock.js:296 +msgid "Latest serial number" +msgstr "" + +#: templates/js/translated/build.js:379 +msgid "The Bill of Materials contains trackable parts" +msgstr "" + +#: templates/js/translated/build.js:380 +msgid "Build outputs must be generated individually" +msgstr "" + +#: templates/js/translated/build.js:388 +msgid "Trackable parts can have serial numbers specified" +msgstr "" + +#: templates/js/translated/build.js:389 +msgid "Enter serial numbers to generate multiple single build outputs" +msgstr "" + +#: templates/js/translated/build.js:396 +msgid "Create Build Output" +msgstr "" + +#: templates/js/translated/build.js:427 +msgid "Allocate stock items to this build output" +msgstr "" + +#: templates/js/translated/build.js:435 +msgid "Deallocate stock from build output" +msgstr "" + +#: templates/js/translated/build.js:444 +msgid "Complete build output" +msgstr "" + +#: templates/js/translated/build.js:452 +msgid "Scrap build output" +msgstr "" + +#: templates/js/translated/build.js:459 +msgid "Delete build output" +msgstr "" + +#: templates/js/translated/build.js:479 +msgid "Are you sure you wish to deallocate the selected stock items from this build?" +msgstr "" + +#: templates/js/translated/build.js:497 +msgid "Deallocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:583 templates/js/translated/build.js:711 +#: templates/js/translated/build.js:837 +msgid "Select Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:584 templates/js/translated/build.js:712 +#: templates/js/translated/build.js:838 +msgid "At least one build output must be selected" +msgstr "" + +#: templates/js/translated/build.js:598 +msgid "Selected build outputs will be marked as complete" +msgstr "" + +#: templates/js/translated/build.js:602 templates/js/translated/build.js:736 +#: templates/js/translated/build.js:860 +msgid "Output" +msgstr "" + +#: templates/js/translated/build.js:630 +msgid "Complete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:727 +msgid "Selected build outputs will be marked as scrapped" +msgstr "" + +#: templates/js/translated/build.js:729 +msgid "Scrapped output are marked as rejected" +msgstr "" + +#: templates/js/translated/build.js:730 +msgid "Allocated stock items will no longer be available" +msgstr "" + +#: templates/js/translated/build.js:731 +msgid "The completion status of the build order will not be adjusted" +msgstr "" + +#: templates/js/translated/build.js:762 +msgid "Scrap Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:852 +msgid "Selected build outputs will be deleted" +msgstr "" + +#: templates/js/translated/build.js:854 +msgid "Build output data will be permanently deleted" +msgstr "" + +#: templates/js/translated/build.js:855 +msgid "Allocated stock items will be returned to stock" +msgstr "" + +#: templates/js/translated/build.js:873 +msgid "Delete Build Outputs" +msgstr "" + +#: templates/js/translated/build.js:960 +msgid "No build order allocations found" +msgstr "" + +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 +msgid "Allocated Quantity" +msgstr "" + +#: templates/js/translated/build.js:1005 +msgid "Location not specified" +msgstr "" + +#: templates/js/translated/build.js:1027 +msgid "Complete outputs" +msgstr "" + +#: templates/js/translated/build.js:1045 +msgid "Scrap outputs" +msgstr "" + +#: templates/js/translated/build.js:1063 +msgid "Delete outputs" +msgstr "" + +#: templates/js/translated/build.js:1116 +msgid "build output" +msgstr "" + +#: templates/js/translated/build.js:1117 +msgid "build outputs" +msgstr "" + +#: templates/js/translated/build.js:1121 +msgid "Build output actions" +msgstr "" + +#: templates/js/translated/build.js:1297 +msgid "No active build outputs found" +msgstr "" + +#: templates/js/translated/build.js:1390 +msgid "Allocated Lines" +msgstr "" + +#: templates/js/translated/build.js:1404 +msgid "Required Tests" +msgstr "" + +#: templates/js/translated/build.js:1576 +#: templates/js/translated/purchase_order.js:611 +#: templates/js/translated/sales_order.js:1207 +msgid "Select Parts" +msgstr "" + +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 +msgid "You must select at least one part to allocate" +msgstr "" + +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 +msgid "Specify stock allocation quantity" +msgstr "" + +#: templates/js/translated/build.js:1717 +msgid "All Parts Allocated" +msgstr "" + +#: templates/js/translated/build.js:1718 +msgid "All selected parts have been fully allocated" +msgstr "" + +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 +msgid "Select source location (leave blank to take from all locations)" +msgstr "" + +#: templates/js/translated/build.js:1760 +msgid "Allocate Stock Items to Build Order" +msgstr "" + +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 +msgid "No matching stock locations" +msgstr "" + +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 +msgid "No matching stock items" +msgstr "" + +#: templates/js/translated/build.js:1941 +msgid "Automatic Stock Allocation" +msgstr "" + +#: templates/js/translated/build.js:1942 +msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" +msgstr "" + +#: templates/js/translated/build.js:1944 +msgid "If a location is specified, stock will only be allocated from that location" +msgstr "" + +#: templates/js/translated/build.js:1945 +msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" +msgstr "" + +#: templates/js/translated/build.js:1946 +msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" +msgstr "" + +#: templates/js/translated/build.js:1977 +msgid "Allocate Stock Items" +msgstr "" + +#: templates/js/translated/build.js:2082 +msgid "No builds matching query" +msgstr "" + +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 +msgid "Select" +msgstr "" + +#: templates/js/translated/build.js:2131 +msgid "Build order is overdue" +msgstr "" + +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 +msgid "No user information" +msgstr "" + +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 +msgid "Edit stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 +msgid "Delete stock allocation" +msgstr "" + +#: templates/js/translated/build.js:2405 +msgid "Edit Allocation" +msgstr "" + +#: templates/js/translated/build.js:2417 +msgid "Remove Allocation" +msgstr "" + +#: templates/js/translated/build.js:2455 +msgid "build line" +msgstr "" + +#: templates/js/translated/build.js:2456 +msgid "build lines" +msgstr "" + +#: templates/js/translated/build.js:2474 +msgid "No build lines found" +msgstr "" + +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 +#: templates/js/translated/part.js:1202 +msgid "Trackable part" +msgstr "" + +#: templates/js/translated/build.js:2539 +msgid "Unit Quantity" +msgstr "" + +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 +msgid "Sufficient stock available" +msgstr "" + +#: templates/js/translated/build.js:2646 +msgid "Consumable Item" +msgstr "" + +#: templates/js/translated/build.js:2653 +msgid "Tracked item" +msgstr "" + +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 +msgid "Build stock" +msgstr "" + +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 +msgid "Order stock" +msgstr "" + +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 +msgid "Allocate stock" +msgstr "" + +#: templates/js/translated/build.js:2675 +msgid "Remove stock allocation" +msgstr "" + +#: templates/js/translated/company.js:98 +msgid "Add Manufacturer" +msgstr "" + +#: templates/js/translated/company.js:111 +#: templates/js/translated/company.js:213 +msgid "Add Manufacturer Part" +msgstr "" + +#: templates/js/translated/company.js:132 +msgid "Edit Manufacturer Part" +msgstr "" + +#: templates/js/translated/company.js:201 +#: templates/js/translated/purchase_order.js:93 +msgid "Add Supplier" +msgstr "" + +#: templates/js/translated/company.js:243 +#: templates/js/translated/purchase_order.js:318 +msgid "Add Supplier Part" +msgstr "" + +#: templates/js/translated/company.js:344 +msgid "All selected supplier parts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:360 +msgid "Delete Supplier Parts" +msgstr "" + +#: templates/js/translated/company.js:466 +msgid "Add new Company" +msgstr "" + +#: templates/js/translated/company.js:546 +msgid "Parts Supplied" +msgstr "" + +#: templates/js/translated/company.js:555 +msgid "Parts Manufactured" +msgstr "" + +#: templates/js/translated/company.js:570 +msgid "No company information found" +msgstr "" + +#: templates/js/translated/company.js:619 +msgid "Create New Contact" +msgstr "" + +#: templates/js/translated/company.js:635 +#: templates/js/translated/company.js:758 +msgid "Edit Contact" +msgstr "" + +#: templates/js/translated/company.js:672 +msgid "All selected contacts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:678 +#: templates/js/translated/company.js:742 +msgid "Role" +msgstr "" + +#: templates/js/translated/company.js:686 +msgid "Delete Contacts" +msgstr "" + +#: templates/js/translated/company.js:717 +msgid "No contacts found" +msgstr "" + +#: templates/js/translated/company.js:730 +msgid "Phone Number" +msgstr "" + +#: templates/js/translated/company.js:736 +msgid "Email Address" +msgstr "" + +#: templates/js/translated/company.js:762 +msgid "Delete Contact" +msgstr "" + +#: templates/js/translated/company.js:859 +msgid "Create New Address" +msgstr "" + +#: templates/js/translated/company.js:874 +#: templates/js/translated/company.js:1035 +msgid "Edit Address" +msgstr "" + +#: templates/js/translated/company.js:909 +msgid "All selected addresses will be deleted" +msgstr "" + +#: templates/js/translated/company.js:923 +msgid "Delete Addresses" +msgstr "" + +#: templates/js/translated/company.js:950 +msgid "No addresses found" +msgstr "" + +#: templates/js/translated/company.js:989 +msgid "Postal city" +msgstr "" + +#: templates/js/translated/company.js:995 +msgid "State/province" +msgstr "" + +#: templates/js/translated/company.js:1007 +msgid "Courier notes" +msgstr "" + +#: templates/js/translated/company.js:1013 +msgid "Internal notes" +msgstr "" + +#: templates/js/translated/company.js:1039 +msgid "Delete Address" +msgstr "" + +#: templates/js/translated/company.js:1112 +msgid "All selected manufacturer parts will be deleted" +msgstr "" + +#: templates/js/translated/company.js:1127 +msgid "Delete Manufacturer Parts" +msgstr "" + +#: templates/js/translated/company.js:1161 +msgid "All selected parameters will be deleted" +msgstr "" + +#: templates/js/translated/company.js:1175 +msgid "Delete Parameters" +msgstr "" + +#: templates/js/translated/company.js:1191 +#: templates/js/translated/company.js:1479 templates/js/translated/part.js:2244 +msgid "Order parts" +msgstr "" + +#: templates/js/translated/company.js:1208 +msgid "Delete manufacturer parts" +msgstr "" + +#: templates/js/translated/company.js:1240 +msgid "Manufacturer part actions" +msgstr "" + +#: templates/js/translated/company.js:1259 +msgid "No manufacturer parts found" +msgstr "" + +#: templates/js/translated/company.js:1279 +#: templates/js/translated/company.js:1567 templates/js/translated/part.js:798 +#: templates/js/translated/part.js:1210 +msgid "Template part" +msgstr "" + +#: templates/js/translated/company.js:1283 +#: templates/js/translated/company.js:1571 templates/js/translated/part.js:802 +#: templates/js/translated/part.js:1214 +msgid "Assembled part" +msgstr "" + +#: templates/js/translated/company.js:1403 templates/js/translated/part.js:1464 +msgid "No parameters found" +msgstr "" + +#: templates/js/translated/company.js:1438 templates/js/translated/part.js:1527 +msgid "Edit parameter" +msgstr "" + +#: templates/js/translated/company.js:1439 templates/js/translated/part.js:1528 +msgid "Delete parameter" +msgstr "" + +#: templates/js/translated/company.js:1456 templates/js/translated/part.js:1433 +msgid "Edit Parameter" +msgstr "" + +#: templates/js/translated/company.js:1465 templates/js/translated/part.js:1549 +msgid "Delete Parameter" +msgstr "" + +#: templates/js/translated/company.js:1496 +msgid "Delete supplier parts" +msgstr "" + +#: templates/js/translated/company.js:1546 +msgid "No supplier parts found" +msgstr "" + +#: templates/js/translated/company.js:1664 +msgid "Base Units" +msgstr "" + +#: templates/js/translated/company.js:1694 +msgid "Availability" +msgstr "" + +#: templates/js/translated/company.js:1725 +msgid "Edit supplier part" +msgstr "" + +#: templates/js/translated/company.js:1726 +msgid "Delete supplier part" +msgstr "" + +#: templates/js/translated/company.js:1779 +#: templates/js/translated/pricing.js:694 +msgid "Delete Price Break" +msgstr "" + +#: templates/js/translated/company.js:1789 +#: templates/js/translated/pricing.js:712 +msgid "Edit Price Break" +msgstr "" + +#: templates/js/translated/company.js:1804 +msgid "No price break information found" +msgstr "" + +#: templates/js/translated/company.js:1833 +msgid "Last updated" +msgstr "" + +#: templates/js/translated/company.js:1840 +msgid "Edit price break" +msgstr "" + +#: templates/js/translated/company.js:1841 +msgid "Delete price break" +msgstr "" + +#: templates/js/translated/filters.js:186 +#: templates/js/translated/filters.js:667 +msgid "true" +msgstr "" + +#: templates/js/translated/filters.js:190 +#: templates/js/translated/filters.js:668 +msgid "false" +msgstr "" + +#: templates/js/translated/filters.js:214 +msgid "Select filter" +msgstr "" + +#: templates/js/translated/filters.js:437 +msgid "Print Labels" +msgstr "" + +#: templates/js/translated/filters.js:441 +msgid "Print Reports" +msgstr "" + +#: templates/js/translated/filters.js:453 +msgid "Download table data" +msgstr "" + +#: templates/js/translated/filters.js:460 +msgid "Reload table data" +msgstr "" + +#: templates/js/translated/filters.js:469 +msgid "Add new filter" +msgstr "" + +#: templates/js/translated/filters.js:477 +msgid "Clear all filters" +msgstr "" + +#: templates/js/translated/filters.js:577 +msgid "Create filter" +msgstr "" + +#: templates/js/translated/forms.js:378 templates/js/translated/forms.js:393 +#: templates/js/translated/forms.js:407 templates/js/translated/forms.js:421 +msgid "Action Prohibited" +msgstr "" + +#: templates/js/translated/forms.js:380 +msgid "Create operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:395 +msgid "Update operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:409 +msgid "Delete operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:423 +msgid "View operation not allowed" +msgstr "" + +#: templates/js/translated/forms.js:800 +msgid "Keep this form open" +msgstr "" + +#: templates/js/translated/forms.js:903 +msgid "Enter a valid number" +msgstr "" + +#: templates/js/translated/forms.js:1477 templates/modals.html:19 +#: templates/modals.html:43 +msgid "Form errors exist" +msgstr "" + +#: templates/js/translated/forms.js:1975 +msgid "No results found" +msgstr "" + +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 +msgid "Searching" +msgstr "" + +#: templates/js/translated/forms.js:2499 +msgid "Clear input" +msgstr "" + +#: templates/js/translated/forms.js:3101 +msgid "File Column" +msgstr "" + +#: templates/js/translated/forms.js:3101 +msgid "Field Name" +msgstr "" + +#: templates/js/translated/forms.js:3113 +msgid "Select Columns" +msgstr "" + +#: templates/js/translated/helpers.js:77 +msgid "YES" +msgstr "" + +#: templates/js/translated/helpers.js:80 +msgid "NO" +msgstr "" + +#: templates/js/translated/helpers.js:93 +msgid "True" +msgstr "" + +#: templates/js/translated/helpers.js:94 +msgid "False" +msgstr "" + +#: templates/js/translated/index.js:104 +msgid "No parts required for builds" +msgstr "" + +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 +msgid "Select Items" +msgstr "" + +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 +msgid "No items selected for printing" +msgstr "" + +#: templates/js/translated/label.js:150 +msgid "Labels sent to printer" +msgstr "" + +#: templates/js/translated/modals.js:58 templates/js/translated/modals.js:158 +#: templates/js/translated/modals.js:683 +msgid "Cancel" +msgstr "" + +#: templates/js/translated/modals.js:63 templates/js/translated/modals.js:157 +#: templates/js/translated/modals.js:751 templates/js/translated/modals.js:1059 +#: templates/modals.html:28 templates/modals.html:51 +msgid "Submit" +msgstr "" + +#: templates/js/translated/modals.js:156 +msgid "Form Title" +msgstr "" + +#: templates/js/translated/modals.js:445 +msgid "Waiting for server..." +msgstr "" + +#: templates/js/translated/modals.js:596 +msgid "Show Error Information" +msgstr "" + +#: templates/js/translated/modals.js:682 +msgid "Accept" +msgstr "" + +#: templates/js/translated/modals.js:740 +msgid "Loading Data" +msgstr "" + +#: templates/js/translated/modals.js:1011 +msgid "Invalid response from server" +msgstr "" + +#: templates/js/translated/modals.js:1011 +msgid "Form data missing from server response" +msgstr "" + +#: templates/js/translated/modals.js:1023 +msgid "Error posting form data" +msgstr "" + +#: templates/js/translated/modals.js:1120 +msgid "JSON response missing form data" +msgstr "" + +#: templates/js/translated/modals.js:1135 +msgid "Error 400: Bad Request" +msgstr "" + +#: templates/js/translated/modals.js:1136 +msgid "Server returned error code 400" +msgstr "" + +#: templates/js/translated/modals.js:1159 +msgid "Error requesting form data" +msgstr "" + +#: templates/js/translated/news.js:33 +msgid "No news found" +msgstr "" + +#: templates/js/translated/news.js:38 +#: templates/js/translated/notification.js:46 +#: templates/js/translated/part.js:1604 +msgid "ID" +msgstr "" + +#: templates/js/translated/notification.js:52 +msgid "Age" +msgstr "" + +#: templates/js/translated/notification.js:65 +msgid "Notification" +msgstr "" + +#: templates/js/translated/notification.js:224 +msgid "Mark as unread" +msgstr "" + +#: templates/js/translated/notification.js:228 +msgid "Mark as read" +msgstr "" + +#: templates/js/translated/notification.js:254 +msgid "No unread notifications" +msgstr "" + +#: templates/js/translated/notification.js:296 templates/notifications.html:12 +msgid "Notifications will load here" +msgstr "" + +#: templates/js/translated/order.js:89 +msgid "Add Extra Line Item" +msgstr "" + +#: templates/js/translated/order.js:126 +msgid "Export Order" +msgstr "" + +#: templates/js/translated/order.js:241 +msgid "Duplicate Line" +msgstr "" + +#: templates/js/translated/order.js:255 +msgid "Edit Line" +msgstr "" + +#: templates/js/translated/order.js:268 +msgid "Delete Line" +msgstr "" + +#: templates/js/translated/order.js:281 +#: templates/js/translated/purchase_order.js:1990 +msgid "No line items found" +msgstr "" + +#: templates/js/translated/order.js:369 +msgid "Duplicate line" +msgstr "" + +#: templates/js/translated/order.js:370 +msgid "Edit line" +msgstr "" + +#: templates/js/translated/order.js:374 +msgid "Delete line" +msgstr "" + +#: templates/js/translated/part.js:90 +msgid "Part Attributes" +msgstr "" + +#: templates/js/translated/part.js:94 +msgid "Part Creation Options" +msgstr "" + +#: templates/js/translated/part.js:98 +msgid "Part Duplication Options" +msgstr "" + +#: templates/js/translated/part.js:121 +msgid "Add Part Category" +msgstr "" + +#: templates/js/translated/part.js:308 +msgid "Parent part category" +msgstr "" + +#: templates/js/translated/part.js:332 templates/js/translated/stock.js:175 +msgid "Icon (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/part.js:352 +msgid "Create Part Category" +msgstr "" + +#: templates/js/translated/part.js:355 +msgid "Create new category after this one" +msgstr "" + +#: templates/js/translated/part.js:356 +msgid "Part category created" +msgstr "" + +#: templates/js/translated/part.js:370 +msgid "Edit Part Category" +msgstr "" + +#: templates/js/translated/part.js:383 +msgid "Are you sure you want to delete this part category?" +msgstr "" + +#: templates/js/translated/part.js:388 +msgid "Move to parent category" +msgstr "" + +#: templates/js/translated/part.js:397 +msgid "Delete Part Category" +msgstr "" + +#: templates/js/translated/part.js:401 +msgid "Action for parts in this category" +msgstr "" + +#: templates/js/translated/part.js:406 +msgid "Action for child categories" +msgstr "" + +#: templates/js/translated/part.js:430 +msgid "Create Part" +msgstr "" + +#: templates/js/translated/part.js:432 +msgid "Create another part after this one" +msgstr "" + +#: templates/js/translated/part.js:433 +msgid "Part created successfully" +msgstr "" + +#: templates/js/translated/part.js:461 +msgid "Edit Part" +msgstr "" + +#: templates/js/translated/part.js:463 +msgid "Part edited" +msgstr "" + +#: templates/js/translated/part.js:474 +msgid "Create Part Variant" +msgstr "" + +#: templates/js/translated/part.js:531 +msgid "Active Part" +msgstr "" + +#: templates/js/translated/part.js:532 +msgid "Part cannot be deleted as it is currently active" +msgstr "" + +#: templates/js/translated/part.js:546 +msgid "Deleting this part cannot be reversed" +msgstr "" + +#: templates/js/translated/part.js:548 +msgid "Any stock items for this part will be deleted" +msgstr "" + +#: templates/js/translated/part.js:549 +msgid "This part will be removed from any Bills of Material" +msgstr "" + +#: templates/js/translated/part.js:550 +msgid "All manufacturer and supplier information for this part will be deleted" +msgstr "" + +#: templates/js/translated/part.js:557 +msgid "Delete Part" +msgstr "" + +#: templates/js/translated/part.js:593 +msgid "You are subscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:595 +msgid "You have subscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:600 +msgid "Subscribe to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:602 +msgid "You have unsubscribed to notifications for this item" +msgstr "" + +#: templates/js/translated/part.js:619 +msgid "Validating the BOM will mark each line item as valid" +msgstr "" + +#: templates/js/translated/part.js:629 +msgid "Validate Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:632 +msgid "Validated Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:657 +msgid "Copy Bill of Materials" +msgstr "" + +#: templates/js/translated/part.js:685 +#: templates/js/translated/table_filters.js:747 +msgid "Low stock" +msgstr "" + +#: templates/js/translated/part.js:688 +msgid "No stock available" +msgstr "" + +#: templates/js/translated/part.js:748 +msgid "Demand" +msgstr "" + +#: templates/js/translated/part.js:771 +msgid "Unit" +msgstr "" + +#: templates/js/translated/part.js:794 templates/js/translated/part.js:1206 +msgid "Virtual part" +msgstr "" + +#: templates/js/translated/part.js:806 +msgid "Subscribed part" +msgstr "" + +#: templates/js/translated/part.js:810 +msgid "Salable part" +msgstr "" + +#: templates/js/translated/part.js:889 +msgid "Schedule generation of a new stocktake report." +msgstr "" + +#: templates/js/translated/part.js:889 +msgid "Once complete, the stocktake report will be available for download." +msgstr "" + +#: templates/js/translated/part.js:897 +msgid "Generate Stocktake Report" +msgstr "" + +#: templates/js/translated/part.js:901 +msgid "Stocktake report scheduled" +msgstr "" + +#: templates/js/translated/part.js:1050 +msgid "No stocktake information available" +msgstr "" + +#: templates/js/translated/part.js:1108 templates/js/translated/part.js:1144 +msgid "Edit Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1112 templates/js/translated/part.js:1154 +msgid "Delete Stocktake Entry" +msgstr "" + +#: templates/js/translated/part.js:1281 +msgid "No variants found" +msgstr "" + +#: templates/js/translated/part.js:1599 +msgid "No part parameter templates found" +msgstr "" + +#: templates/js/translated/part.js:1662 +msgid "Edit Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1674 +msgid "Any parameters which reference this template will also be deleted" +msgstr "" + +#: templates/js/translated/part.js:1682 +msgid "Delete Part Parameter Template" +msgstr "" + +#: templates/js/translated/part.js:1716 +#: templates/js/translated/purchase_order.js:1654 +msgid "No purchase orders found" +msgstr "" + +#: templates/js/translated/part.js:1860 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 +msgid "This line item is overdue" +msgstr "" + +#: templates/js/translated/part.js:1906 +#: templates/js/translated/purchase_order.js:2220 +msgid "Receive line item" +msgstr "" + +#: templates/js/translated/part.js:1969 +msgid "Delete part relationship" +msgstr "" + +#: templates/js/translated/part.js:1991 +msgid "Delete Part Relationship" +msgstr "" + +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 +msgid "No parts found" +msgstr "" + +#: templates/js/translated/part.js:2200 +msgid "Set the part category for the selected parts" +msgstr "" + +#: templates/js/translated/part.js:2205 +msgid "Set Part Category" +msgstr "" + +#: templates/js/translated/part.js:2235 +msgid "Set category" +msgstr "" + +#: templates/js/translated/part.js:2286 +msgid "part" +msgstr "" + +#: templates/js/translated/part.js:2287 +msgid "parts" +msgstr "" + +#: templates/js/translated/part.js:2383 +msgid "No category" +msgstr "" + +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 +#: templates/js/translated/stock.js:2669 +msgid "Display as list" +msgstr "" + +#: templates/js/translated/part.js:2546 +msgid "Display as grid" +msgstr "" + +#: templates/js/translated/part.js:2644 +msgid "No subcategories found" +msgstr "" + +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 +msgid "Display as tree" +msgstr "" + +#: templates/js/translated/part.js:2760 +msgid "Load Subcategories" +msgstr "" + +#: templates/js/translated/part.js:2776 +msgid "Subscribed category" +msgstr "" + +#: templates/js/translated/part.js:2863 +msgid "No test templates matching query" +msgstr "" + +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 +msgid "results" +msgstr "" + +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 +msgid "Edit test result" +msgstr "" + +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 +msgid "Delete test result" +msgstr "" + +#: templates/js/translated/part.js:2940 +msgid "This test is defined for a parent part" +msgstr "" + +#: templates/js/translated/part.js:2956 +msgid "Edit Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:2970 +msgid "Delete Test Result Template" +msgstr "" + +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 +msgid "No date specified" +msgstr "" + +#: templates/js/translated/part.js:3052 +msgid "Specified date is in the past" +msgstr "" + +#: templates/js/translated/part.js:3058 +msgid "Speculative" +msgstr "" + +#: templates/js/translated/part.js:3108 +msgid "No scheduling information available for this part" +msgstr "" + +#: templates/js/translated/part.js:3114 +msgid "Error fetching scheduling information for this part" +msgstr "" + +#: templates/js/translated/part.js:3210 +msgid "Scheduled Stock Quantities" +msgstr "" + +#: templates/js/translated/part.js:3226 +msgid "Maximum Quantity" +msgstr "" + +#: templates/js/translated/part.js:3271 +msgid "Minimum Stock Level" +msgstr "" + +#: templates/js/translated/plugin.js:46 +msgid "No plugins found" +msgstr "" + +#: templates/js/translated/plugin.js:58 +msgid "This plugin is no longer installed" +msgstr "" + +#: templates/js/translated/plugin.js:60 +msgid "This plugin is active" +msgstr "" + +#: templates/js/translated/plugin.js:62 +msgid "This plugin is installed but not active" +msgstr "" + +#: templates/js/translated/plugin.js:117 templates/js/translated/plugin.js:186 +msgid "Disable Plugin" +msgstr "" + +#: templates/js/translated/plugin.js:119 templates/js/translated/plugin.js:186 +msgid "Enable Plugin" +msgstr "" + +#: templates/js/translated/plugin.js:158 +msgid "The Plugin was installed" +msgstr "" + +#: templates/js/translated/plugin.js:177 +msgid "Are you sure you want to enable this plugin?" +msgstr "" + +#: templates/js/translated/plugin.js:181 +msgid "Are you sure you want to disable this plugin?" +msgstr "" + +#: templates/js/translated/plugin.js:189 +msgid "Enable" +msgstr "" + +#: templates/js/translated/plugin.js:189 +msgid "Disable" +msgstr "" + +#: templates/js/translated/plugin.js:203 +msgid "Plugin updated" +msgstr "" + +#: templates/js/translated/pricing.js:159 +msgid "Error fetching currency data" +msgstr "" + +#: templates/js/translated/pricing.js:321 +msgid "No BOM data available" +msgstr "" + +#: templates/js/translated/pricing.js:463 +msgid "No supplier pricing data available" +msgstr "" + +#: templates/js/translated/pricing.js:572 +msgid "No price break data available" +msgstr "" + +#: templates/js/translated/pricing.js:755 +msgid "No purchase history data available" +msgstr "" + +#: templates/js/translated/pricing.js:791 +msgid "Purchase Price History" +msgstr "" + +#: templates/js/translated/pricing.js:894 +msgid "No sales history data available" +msgstr "" + +#: templates/js/translated/pricing.js:916 +msgid "Sale Price History" +msgstr "" + +#: templates/js/translated/pricing.js:1005 +msgid "No variant data available" +msgstr "" + +#: templates/js/translated/pricing.js:1045 +msgid "Variant Part" +msgstr "" + +#: templates/js/translated/purchase_order.js:169 +msgid "Select purchase order to duplicate" +msgstr "" + +#: templates/js/translated/purchase_order.js:176 +msgid "Duplicate Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:177 +msgid "Duplicate all line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:184 +msgid "Duplicate Extra Lines" +msgstr "" + +#: templates/js/translated/purchase_order.js:185 +msgid "Duplicate extra line items from the selected order" +msgstr "" + +#: templates/js/translated/purchase_order.js:206 +msgid "Edit Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:223 +msgid "Duplication Options" +msgstr "" + +#: templates/js/translated/purchase_order.js:431 +msgid "Complete Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:448 +#: templates/js/translated/return_order.js:210 +#: templates/js/translated/sales_order.js:552 +msgid "Mark this order as complete?" +msgstr "" + +#: templates/js/translated/purchase_order.js:454 +msgid "All line items have been received" +msgstr "" + +#: templates/js/translated/purchase_order.js:459 +msgid "This order has line items which have not been marked as received." +msgstr "" + +#: templates/js/translated/purchase_order.js:460 +msgid "Completing this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:483 +msgid "Cancel Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:488 +msgid "Are you sure you wish to cancel this purchase order?" +msgstr "" + +#: templates/js/translated/purchase_order.js:494 +msgid "This purchase order can not be cancelled" +msgstr "" + +#: templates/js/translated/purchase_order.js:515 +#: templates/js/translated/return_order.js:164 +msgid "After placing this order, line items will no longer be editable." +msgstr "" + +#: templates/js/translated/purchase_order.js:520 +msgid "Issue Purchase Order" +msgstr "" + +#: templates/js/translated/purchase_order.js:612 +msgid "At least one purchaseable part must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:637 +msgid "Quantity to order" +msgstr "" + +#: templates/js/translated/purchase_order.js:646 +msgid "New supplier part" +msgstr "" + +#: templates/js/translated/purchase_order.js:664 +msgid "New purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:705 +msgid "Add to purchase order" +msgstr "" + +#: templates/js/translated/purchase_order.js:755 +msgid "Merge" +msgstr "" + +#: templates/js/translated/purchase_order.js:859 +msgid "No matching supplier parts" +msgstr "" + +#: templates/js/translated/purchase_order.js:878 +msgid "No matching purchase orders" +msgstr "" + +#: templates/js/translated/purchase_order.js:1073 +#: templates/js/translated/return_order.js:490 +msgid "Select Line Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1074 +#: templates/js/translated/return_order.js:491 +msgid "At least one line item must be selected" +msgstr "" + +#: templates/js/translated/purchase_order.js:1104 +msgid "Received Quantity" +msgstr "" + +#: templates/js/translated/purchase_order.js:1115 +msgid "Quantity to receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1191 +msgid "Stock Status" +msgstr "" + +#: templates/js/translated/purchase_order.js:1205 +msgid "Add barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1206 +msgid "Remove barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1209 +msgid "Specify location" +msgstr "" + +#: templates/js/translated/purchase_order.js:1217 +msgid "Add batch code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1228 +msgid "Add serial numbers" +msgstr "" + +#: templates/js/translated/purchase_order.js:1280 +msgid "Serials" +msgstr "" + +#: templates/js/translated/purchase_order.js:1305 +msgid "Order Code" +msgstr "" + +#: templates/js/translated/purchase_order.js:1307 +msgid "Quantity to Receive" +msgstr "" + +#: templates/js/translated/purchase_order.js:1333 +#: templates/js/translated/return_order.js:560 +msgid "Confirm receipt of items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1334 +msgid "Receive Purchase Order Items" +msgstr "" + +#: templates/js/translated/purchase_order.js:1402 +msgid "Scan Item Barcode" +msgstr "" + +#: templates/js/translated/purchase_order.js:1403 +msgid "Scan barcode on incoming item (must not match any existing stock items)" +msgstr "" + +#: templates/js/translated/purchase_order.js:1417 +msgid "Invalid barcode data" +msgstr "" + +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 +msgid "Order is overdue" +msgstr "" + +#: templates/js/translated/purchase_order.js:1843 +msgid "All selected Line items will be deleted" +msgstr "" + +#: templates/js/translated/purchase_order.js:1861 +msgid "Delete selected Line items?" +msgstr "" + +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 +msgid "Duplicate Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 +msgid "Edit Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 +msgid "Delete Line Item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 +msgid "Duplicate line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 +msgid "Edit line item" +msgstr "" + +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 +msgid "Delete line item" +msgstr "" + +#: templates/js/translated/report.js:49 +msgid "Print Report" +msgstr "" + +#: templates/js/translated/report.js:68 +msgid "Report print successful" +msgstr "" + +#: templates/js/translated/report.js:73 +msgid "Report printing failed" +msgstr "" + +#: templates/js/translated/return_order.js:60 +#: templates/js/translated/sales_order.js:86 +msgid "Add Customer" +msgstr "" + +#: templates/js/translated/return_order.js:134 +msgid "Create Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:149 +msgid "Edit Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:169 +msgid "Issue Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:186 +msgid "Are you sure you wish to cancel this Return Order?" +msgstr "" + +#: templates/js/translated/return_order.js:193 +msgid "Cancel Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:218 +msgid "Complete Return Order" +msgstr "" + +#: templates/js/translated/return_order.js:265 +msgid "No return orders found" +msgstr "" + +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 +msgid "Invalid Customer" +msgstr "" + +#: templates/js/translated/return_order.js:561 +msgid "Receive Return Order Items" +msgstr "" + +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 +msgid "No matching line items" +msgstr "" + +#: templates/js/translated/return_order.js:797 +msgid "Mark item as received" +msgstr "" + +#: templates/js/translated/sales_order.js:161 +msgid "Create Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:176 +msgid "Edit Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:291 +msgid "No stock items have been allocated to this shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:296 +msgid "The following stock items will be shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:336 +msgid "Complete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:360 +msgid "Confirm Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:416 +msgid "No pending shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:420 +msgid "No stock items have been allocated to pending shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:430 +msgid "Complete Shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:452 +msgid "Skip" +msgstr "" + +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + +#: templates/js/translated/sales_order.js:513 +msgid "This order has line items which have not been completed." +msgstr "" + +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 +msgid "Issue this Sales Order?" +msgstr "" + +#: templates/js/translated/sales_order.js:577 +msgid "Issue Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:596 +msgid "Cancel Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:601 +msgid "Cancelling this order means that the order will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:655 +msgid "Create New Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:764 +msgid "No sales orders found" +msgstr "" + +#: templates/js/translated/sales_order.js:944 +msgid "Edit shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:947 +msgid "Complete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:952 +msgid "Delete shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:969 +msgid "Edit Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:984 +msgid "Delete Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1017 +msgid "No matching shipments found" +msgstr "" + +#: templates/js/translated/sales_order.js:1042 +msgid "Shipment Reference" +msgstr "" + +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 +msgid "Not shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:1084 +msgid "Tracking" +msgstr "" + +#: templates/js/translated/sales_order.js:1088 +msgid "Invoice" +msgstr "" + +#: templates/js/translated/sales_order.js:1255 +msgid "Add Shipment" +msgstr "" + +#: templates/js/translated/sales_order.js:1306 +msgid "Confirm stock allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1307 +msgid "Allocate Stock Items to Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:1513 +msgid "No sales order allocations found" +msgstr "" + +#: templates/js/translated/sales_order.js:1605 +msgid "Edit Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1619 +msgid "Confirm Delete Operation" +msgstr "" + +#: templates/js/translated/sales_order.js:1620 +msgid "Delete Stock Allocation" +msgstr "" + +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 +msgid "Shipped to customer" +msgstr "" + +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 +msgid "Stock location not specified" +msgstr "" + +#: templates/js/translated/sales_order.js:2044 +msgid "Allocate serial numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2048 +msgid "Purchase stock" +msgstr "" + +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 +msgid "Calculate price" +msgstr "" + +#: templates/js/translated/sales_order.js:2071 +msgid "Cannot be deleted as items have been shipped" +msgstr "" + +#: templates/js/translated/sales_order.js:2074 +msgid "Cannot be deleted as items have been allocated" +msgstr "" + +#: templates/js/translated/sales_order.js:2145 +msgid "Allocate Serial Numbers" +msgstr "" + +#: templates/js/translated/sales_order.js:2253 +msgid "Update Unit Price" +msgstr "" + +#: templates/js/translated/search.js:270 +msgid "No results" +msgstr "" + +#: templates/js/translated/search.js:292 templates/search.html:25 +msgid "Enter search query" +msgstr "" + +#: templates/js/translated/search.js:342 +msgid "result" +msgstr "" + +#: templates/js/translated/search.js:352 +msgid "Minimize results" +msgstr "" + +#: templates/js/translated/search.js:355 +msgid "Remove results" +msgstr "" + +#: templates/js/translated/stock.js:98 +msgid "Serialize Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:129 +msgid "Confirm Stock Serialization" +msgstr "" + +#: templates/js/translated/stock.js:139 +msgid "Default icon for all locations that have no icon set (optional) - Explore all available icons on" +msgstr "" + +#: templates/js/translated/stock.js:152 +msgid "Parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:166 +msgid "Add Location type" +msgstr "" + +#: templates/js/translated/stock.js:202 +msgid "Edit Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:217 +msgid "New Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:219 +msgid "Create another location after this one" +msgstr "" + +#: templates/js/translated/stock.js:220 +msgid "Stock location created" +msgstr "" + +#: templates/js/translated/stock.js:234 +msgid "Are you sure you want to delete this stock location?" +msgstr "" + +#: templates/js/translated/stock.js:241 +msgid "Move to parent stock location" +msgstr "" + +#: templates/js/translated/stock.js:250 +msgid "Delete Stock Location" +msgstr "" + +#: templates/js/translated/stock.js:254 +msgid "Action for stock items in this stock location" +msgstr "" + +#: templates/js/translated/stock.js:259 +msgid "Action for sub-locations" +msgstr "" + +#: templates/js/translated/stock.js:313 +msgid "This part cannot be serialized" +msgstr "" + +#: templates/js/translated/stock.js:349 +msgid "Add given quantity as packs instead of individual items" +msgstr "" + +#: templates/js/translated/stock.js:362 +msgid "Enter initial quantity for this stock item" +msgstr "" + +#: templates/js/translated/stock.js:368 +msgid "Enter serial numbers for new stock (or leave blank)" +msgstr "" + +#: templates/js/translated/stock.js:439 +msgid "Stock item duplicated" +msgstr "" + +#: templates/js/translated/stock.js:459 +msgid "Duplicate Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:475 +msgid "Are you sure you want to delete this stock item?" +msgstr "" + +#: templates/js/translated/stock.js:480 +msgid "Delete Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:501 +msgid "Edit Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:543 +msgid "Create another item after this one" +msgstr "" + +#: templates/js/translated/stock.js:555 +msgid "Created new stock item" +msgstr "" + +#: templates/js/translated/stock.js:568 +msgid "Created multiple stock items" +msgstr "" + +#: templates/js/translated/stock.js:593 +msgid "Find Serial Number" +msgstr "" + +#: templates/js/translated/stock.js:597 templates/js/translated/stock.js:598 +msgid "Enter serial number" +msgstr "" + +#: templates/js/translated/stock.js:614 +msgid "Enter a serial number" +msgstr "" + +#: templates/js/translated/stock.js:634 +msgid "No matching serial number" +msgstr "" + +#: templates/js/translated/stock.js:643 +msgid "More than one matching result found" +msgstr "" + +#: templates/js/translated/stock.js:751 +msgid "Confirm stock assignment" +msgstr "" + +#: templates/js/translated/stock.js:752 +msgid "Assign Stock to Customer" +msgstr "" + +#: templates/js/translated/stock.js:829 +msgid "Warning: Merge operation cannot be reversed" +msgstr "" + +#: templates/js/translated/stock.js:830 +msgid "Some information will be lost when merging stock items" +msgstr "" + +#: templates/js/translated/stock.js:832 +msgid "Stock transaction history will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:833 +msgid "Supplier part information will be deleted for merged items" +msgstr "" + +#: templates/js/translated/stock.js:928 +msgid "Confirm stock item merge" +msgstr "" + +#: templates/js/translated/stock.js:929 +msgid "Merge Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1024 +msgid "Transfer Stock" +msgstr "" + +#: templates/js/translated/stock.js:1025 +msgid "Move" +msgstr "" + +#: templates/js/translated/stock.js:1031 +msgid "Count Stock" +msgstr "" + +#: templates/js/translated/stock.js:1032 +msgid "Count" +msgstr "" + +#: templates/js/translated/stock.js:1036 +msgid "Remove Stock" +msgstr "" + +#: templates/js/translated/stock.js:1037 +msgid "Take" +msgstr "" + +#: templates/js/translated/stock.js:1041 +msgid "Add Stock" +msgstr "" + +#: templates/js/translated/stock.js:1042 users/models.py:401 +msgid "Add" +msgstr "" + +#: templates/js/translated/stock.js:1046 +msgid "Delete Stock" +msgstr "" + +#: templates/js/translated/stock.js:1146 +msgid "Quantity cannot be adjusted for serialized stock" +msgstr "" + +#: templates/js/translated/stock.js:1146 +msgid "Specify stock quantity" +msgstr "" + +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 +msgid "Select Stock Items" +msgstr "" + +#: templates/js/translated/stock.js:1181 +msgid "Select at least one available stock item" +msgstr "" + +#: templates/js/translated/stock.js:1227 +msgid "Confirm stock adjustment" +msgstr "" + +#: templates/js/translated/stock.js:1363 +msgid "PASS" +msgstr "" + +#: templates/js/translated/stock.js:1365 +msgid "FAIL" +msgstr "" + +#: templates/js/translated/stock.js:1370 +msgid "NO RESULT" +msgstr "" + +#: templates/js/translated/stock.js:1450 +msgid "Pass test" +msgstr "" + +#: templates/js/translated/stock.js:1453 +msgid "Add test result" +msgstr "" + +#: templates/js/translated/stock.js:1476 +msgid "No test results found" +msgstr "" + +#: templates/js/translated/stock.js:1540 +msgid "Test Date" +msgstr "" + +#: templates/js/translated/stock.js:1553 +msgid "Test started" +msgstr "" + +#: templates/js/translated/stock.js:1562 +msgid "Test finished" +msgstr "" + +#: templates/js/translated/stock.js:1716 +msgid "Edit Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1736 +msgid "Delete Test Result" +msgstr "" + +#: templates/js/translated/stock.js:1768 +msgid "In production" +msgstr "" + +#: templates/js/translated/stock.js:1772 +msgid "Installed in Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:1780 +msgid "Assigned to Sales Order" +msgstr "" + +#: templates/js/translated/stock.js:1786 +msgid "No stock location set" +msgstr "" + +#: templates/js/translated/stock.js:1842 +msgid "Change stock status" +msgstr "" + +#: templates/js/translated/stock.js:1851 +msgid "Merge stock" +msgstr "" + +#: templates/js/translated/stock.js:1900 +msgid "Delete stock" +msgstr "" + +#: templates/js/translated/stock.js:1953 +msgid "stock items" +msgstr "" + +#: templates/js/translated/stock.js:1958 +msgid "Scan to location" +msgstr "" + +#: templates/js/translated/stock.js:1969 +msgid "Stock Actions" +msgstr "" + +#: templates/js/translated/stock.js:2013 +msgid "Load installed items" +msgstr "" + +#: templates/js/translated/stock.js:2091 +msgid "Stock item is in production" +msgstr "" + +#: templates/js/translated/stock.js:2096 +msgid "Stock item assigned to sales order" +msgstr "" + +#: templates/js/translated/stock.js:2099 +msgid "Stock item assigned to customer" +msgstr "" + +#: templates/js/translated/stock.js:2102 +msgid "Serialized stock item has been allocated" +msgstr "" + +#: templates/js/translated/stock.js:2104 +msgid "Stock item has been fully allocated" +msgstr "" + +#: templates/js/translated/stock.js:2106 +msgid "Stock item has been partially allocated" +msgstr "" + +#: templates/js/translated/stock.js:2109 +msgid "Stock item has been installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:2111 +msgid "Stock item has been consumed by a build order" +msgstr "" + +#: templates/js/translated/stock.js:2115 +msgid "Stock item has expired" +msgstr "" + +#: templates/js/translated/stock.js:2117 +msgid "Stock item will expire soon" +msgstr "" + +#: templates/js/translated/stock.js:2122 +msgid "Stock item has been rejected" +msgstr "" + +#: templates/js/translated/stock.js:2124 +msgid "Stock item is lost" +msgstr "" + +#: templates/js/translated/stock.js:2126 +msgid "Stock item is destroyed" +msgstr "" + +#: templates/js/translated/stock.js:2130 +#: templates/js/translated/table_filters.js:350 +msgid "Depleted" +msgstr "" + +#: templates/js/translated/stock.js:2295 +msgid "Supplier part not specified" +msgstr "" + +#: templates/js/translated/stock.js:2342 +msgid "Stock Value" +msgstr "" + +#: templates/js/translated/stock.js:2470 +msgid "No stock items matching query" +msgstr "" + +#: templates/js/translated/stock.js:2573 +msgid "stock locations" +msgstr "" + +#: templates/js/translated/stock.js:2728 +msgid "Load Sublocations" +msgstr "" + +#: templates/js/translated/stock.js:2846 +msgid "Details" +msgstr "" + +#: templates/js/translated/stock.js:2850 +msgid "No changes" +msgstr "" + +#: templates/js/translated/stock.js:2862 +msgid "Part information unavailable" +msgstr "" + +#: templates/js/translated/stock.js:2884 +msgid "Location no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2901 +msgid "Build order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2916 +msgid "Purchase order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2933 +msgid "Sales Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2950 +msgid "Return Order no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2969 +msgid "Customer no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:2987 +msgid "Stock item no longer exists" +msgstr "" + +#: templates/js/translated/stock.js:3005 +msgid "Added" +msgstr "" + +#: templates/js/translated/stock.js:3013 +msgid "Removed" +msgstr "" + +#: templates/js/translated/stock.js:3085 +msgid "No installed items" +msgstr "" + +#: templates/js/translated/stock.js:3139 templates/js/translated/stock.js:3175 +msgid "Uninstall Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3197 +msgid "Select stock item to uninstall" +msgstr "" + +#: templates/js/translated/stock.js:3218 +msgid "Install another stock item into this item" +msgstr "" + +#: templates/js/translated/stock.js:3219 +msgid "Stock items can only be installed if they meet the following criteria" +msgstr "" + +#: templates/js/translated/stock.js:3221 +msgid "The Stock Item links to a Part which is the BOM for this Stock Item" +msgstr "" + +#: templates/js/translated/stock.js:3222 +msgid "The Stock Item is currently available in stock" +msgstr "" + +#: templates/js/translated/stock.js:3223 +msgid "The Stock Item is not already installed in another item" +msgstr "" + +#: templates/js/translated/stock.js:3224 +msgid "The Stock Item is tracked by either a batch code or serial number" +msgstr "" + +#: templates/js/translated/stock.js:3237 +msgid "Select part to install" +msgstr "" + +#: templates/js/translated/stock.js:3300 +msgid "Select one or more stock items" +msgstr "" + +#: templates/js/translated/stock.js:3313 +msgid "Selected stock items" +msgstr "" + +#: templates/js/translated/stock.js:3317 +msgid "Change Stock Status" +msgstr "" + +#: templates/js/translated/table_filters.js:74 +msgid "Has project code" +msgstr "" + +#: templates/js/translated/table_filters.js:89 +#: templates/js/translated/table_filters.js:605 +#: templates/js/translated/table_filters.js:617 +#: templates/js/translated/table_filters.js:658 +msgid "Order status" +msgstr "" + +#: templates/js/translated/table_filters.js:94 +#: templates/js/translated/table_filters.js:622 +#: templates/js/translated/table_filters.js:648 +#: templates/js/translated/table_filters.js:663 +msgid "Outstanding" +msgstr "" + +#: templates/js/translated/table_filters.js:102 +#: templates/js/translated/table_filters.js:528 +#: templates/js/translated/table_filters.js:630 +#: templates/js/translated/table_filters.js:671 +msgid "Assigned to me" +msgstr "" + +#: templates/js/translated/table_filters.js:158 +msgid "Trackable Part" +msgstr "" + +#: templates/js/translated/table_filters.js:162 +msgid "Assembled Part" +msgstr "" + +#: templates/js/translated/table_filters.js:166 +msgid "Has Available Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:182 +msgid "Allow Variant Stock" +msgstr "" + +#: templates/js/translated/table_filters.js:234 +#: templates/js/translated/table_filters.js:345 +msgid "Include sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:235 +msgid "Include locations" +msgstr "" + +#: templates/js/translated/table_filters.js:267 +msgid "Has location type" +msgstr "" + +#: templates/js/translated/table_filters.js:278 +#: templates/js/translated/table_filters.js:279 +#: templates/js/translated/table_filters.js:711 +msgid "Include subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:287 +#: templates/js/translated/table_filters.js:759 +msgid "Subscribed" +msgstr "" + +#: templates/js/translated/table_filters.js:298 +#: templates/js/translated/table_filters.js:380 +msgid "Is Serialized" +msgstr "" + +#: templates/js/translated/table_filters.js:301 +#: templates/js/translated/table_filters.js:387 +msgid "Serial number GTE" +msgstr "" + +#: templates/js/translated/table_filters.js:302 +#: templates/js/translated/table_filters.js:388 +msgid "Serial number greater than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:305 +#: templates/js/translated/table_filters.js:391 +msgid "Serial number LTE" +msgstr "" + +#: templates/js/translated/table_filters.js:306 +#: templates/js/translated/table_filters.js:392 +msgid "Serial number less than or equal to" +msgstr "" + +#: templates/js/translated/table_filters.js:309 +#: templates/js/translated/table_filters.js:310 +#: templates/js/translated/table_filters.js:383 +#: templates/js/translated/table_filters.js:384 +msgid "Serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:314 +#: templates/js/translated/table_filters.js:405 +msgid "Batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:325 +#: templates/js/translated/table_filters.js:700 +msgid "Active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:326 +msgid "Show stock for active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:331 +msgid "Part is an assembly" +msgstr "" + +#: templates/js/translated/table_filters.js:335 +msgid "Is allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:336 +msgid "Item has been allocated" +msgstr "" + +#: templates/js/translated/table_filters.js:341 +msgid "Stock is available for use" +msgstr "" + +#: templates/js/translated/table_filters.js:346 +msgid "Include stock in sublocations" +msgstr "" + +#: templates/js/translated/table_filters.js:351 +msgid "Show stock items which are depleted" +msgstr "" + +#: templates/js/translated/table_filters.js:356 +msgid "Show items which are in stock" +msgstr "" + +#: templates/js/translated/table_filters.js:361 +msgid "Show items which are in production" +msgstr "" + +#: templates/js/translated/table_filters.js:365 +msgid "Include Variants" +msgstr "" + +#: templates/js/translated/table_filters.js:366 +msgid "Include stock items for variant parts" +msgstr "" + +#: templates/js/translated/table_filters.js:371 +msgid "Show stock items which are installed in another item" +msgstr "" + +#: templates/js/translated/table_filters.js:376 +msgid "Show items which have been assigned to a customer" +msgstr "" + +#: templates/js/translated/table_filters.js:396 +#: templates/js/translated/table_filters.js:397 +msgid "Stock status" +msgstr "" + +#: templates/js/translated/table_filters.js:400 +msgid "Has batch code" +msgstr "" + +#: templates/js/translated/table_filters.js:409 +msgid "Stock item is tracked by either batch code or serial number" +msgstr "" + +#: templates/js/translated/table_filters.js:414 +msgid "Has purchase price" +msgstr "" + +#: templates/js/translated/table_filters.js:415 +msgid "Show stock items which have a purchase price set" +msgstr "" + +#: templates/js/translated/table_filters.js:419 +msgid "Expiry Date before" +msgstr "" + +#: templates/js/translated/table_filters.js:423 +msgid "Expiry Date after" +msgstr "" + +#: templates/js/translated/table_filters.js:436 +msgid "Show stock items which have expired" +msgstr "" + +#: templates/js/translated/table_filters.js:442 +msgid "Show stock which is close to expiring" +msgstr "" + +#: templates/js/translated/table_filters.js:456 +msgid "Test Passed" +msgstr "" + +#: templates/js/translated/table_filters.js:460 +msgid "Include Installed Items" +msgstr "" + +#: templates/js/translated/table_filters.js:515 +msgid "Build status" +msgstr "" + +#: templates/js/translated/table_filters.js:712 +msgid "Include parts in subcategories" +msgstr "" + +#: templates/js/translated/table_filters.js:717 +msgid "Show active parts" +msgstr "" + +#: templates/js/translated/table_filters.js:725 +msgid "Available stock" +msgstr "" + +#: templates/js/translated/table_filters.js:733 +#: templates/js/translated/table_filters.js:833 +msgid "Has Units" +msgstr "" + +#: templates/js/translated/table_filters.js:734 +msgid "Part has defined units" +msgstr "" + +#: templates/js/translated/table_filters.js:738 +msgid "Has IPN" +msgstr "" + +#: templates/js/translated/table_filters.js:739 +msgid "Part has internal part number" +msgstr "" + +#: templates/js/translated/table_filters.js:743 +msgid "In stock" +msgstr "" + +#: templates/js/translated/table_filters.js:751 +msgid "Purchasable" +msgstr "" + +#: templates/js/translated/table_filters.js:763 +msgid "Has stocktake entries" +msgstr "" + +#: templates/js/translated/table_filters.js:829 +msgid "Has Choices" +msgstr "" + +#: templates/js/translated/tables.js:92 +msgid "Display calendar view" +msgstr "" + +#: templates/js/translated/tables.js:102 +msgid "Display list view" +msgstr "" + +#: templates/js/translated/tables.js:112 +msgid "Display tree view" +msgstr "" + +#: templates/js/translated/tables.js:130 +msgid "Expand all rows" +msgstr "" + +#: templates/js/translated/tables.js:136 +msgid "Collapse all rows" +msgstr "" + +#: templates/js/translated/tables.js:186 +msgid "Export Table Data" +msgstr "" + +#: templates/js/translated/tables.js:190 +msgid "Select File Format" +msgstr "" + +#: templates/js/translated/tables.js:529 +msgid "Loading data" +msgstr "" + +#: templates/js/translated/tables.js:532 +msgid "rows per page" +msgstr "" + +#: templates/js/translated/tables.js:537 +msgid "Showing all rows" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "Showing" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "to" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "of" +msgstr "" + +#: templates/js/translated/tables.js:539 +msgid "rows" +msgstr "" + +#: templates/js/translated/tables.js:546 +msgid "No matching results" +msgstr "" + +#: templates/js/translated/tables.js:549 +msgid "Hide/Show pagination" +msgstr "" + +#: templates/js/translated/tables.js:555 +msgid "Toggle" +msgstr "" + +#: templates/js/translated/tables.js:558 +msgid "Columns" +msgstr "" + +#: templates/js/translated/tables.js:561 +msgid "All" +msgstr "" + +#: templates/navbar.html:45 +msgid "Buy" +msgstr "" + +#: templates/navbar.html:57 +msgid "Sell" +msgstr "" + +#: templates/navbar.html:121 +msgid "Show Notifications" +msgstr "" + +#: templates/navbar.html:124 +msgid "New Notifications" +msgstr "" + +#: templates/navbar.html:144 users/models.py:201 +msgid "Admin" +msgstr "" + +#: templates/navbar.html:148 +msgid "Logout" +msgstr "" + +#: templates/notes_buttons.html:6 templates/notes_buttons.html:7 +msgid "Save" +msgstr "" + +#: templates/notifications.html:9 +msgid "Show all notifications and history" +msgstr "" + +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + +#: templates/qr_code.html:11 +msgid "QR data not provided" +msgstr "" + +#: templates/registration/logged_out.html:7 +msgid "You were logged out successfully." +msgstr "" + +#: templates/registration/logged_out.html:9 +msgid "Log in again" +msgstr "" + +#: templates/search.html:9 +msgid "Show full search results" +msgstr "" + +#: templates/search.html:12 +msgid "Clear search" +msgstr "" + +#: templates/search.html:15 +msgid "Close search menu" +msgstr "" + +#: templates/socialaccount/authentication_error.html:5 +msgid "Social Network Login Failure" +msgstr "" + +#: templates/socialaccount/authentication_error.html:8 +msgid "Account Login Failure" +msgstr "" + +#: templates/socialaccount/authentication_error.html:11 +msgid "An error occurred while attempting to login via your social network account." +msgstr "" + +#: templates/socialaccount/authentication_error.html:13 +msgid "Contact your system administrator for further information." +msgstr "" + +#: templates/socialaccount/login.html:13 +#, python-format +msgid "Connect %(provider)s" +msgstr "" + +#: templates/socialaccount/login.html:15 +#, python-format +msgid "You are about to connect a new third party account from %(provider)s." +msgstr "" + +#: templates/socialaccount/login.html:17 +#, python-format +msgid "Sign In Via %(provider)s" +msgstr "" + +#: templates/socialaccount/login.html:19 +#, python-format +msgid "You are about to sign in using a third party account from %(provider)s." +msgstr "" + +#: templates/socialaccount/login.html:24 +msgid "Continue" +msgstr "" + +#: templates/socialaccount/login.html:29 +msgid "Invalid SSO Provider" +msgstr "" + +#: templates/socialaccount/login.html:31 +msgid "The selected SSO provider is invalid, or has not been correctly configured" +msgstr "" + +#: templates/socialaccount/signup.html:11 +#, python-format +msgid "You are about to use your %(provider_name)s account to login to %(site_name)s." +msgstr "" + +#: templates/socialaccount/signup.html:13 +msgid "As a final step, please complete the following form" +msgstr "" + +#: templates/socialaccount/snippets/provider_list.html:26 +msgid "Provider has not been configured" +msgstr "" + +#: templates/socialaccount/snippets/provider_list.html:35 +msgid "No SSO providers have been configured" +msgstr "" + +#: templates/stats.html:13 +msgid "Instance Name" +msgstr "" + +#: templates/stats.html:18 +msgid "Database" +msgstr "" + +#: templates/stats.html:26 +msgid "Server is running in debug mode" +msgstr "" + +#: templates/stats.html:33 +msgid "Docker Mode" +msgstr "" + +#: templates/stats.html:34 +msgid "Server is deployed using docker" +msgstr "" + +#: templates/stats.html:39 +msgid "Plugin Support" +msgstr "" + +#: templates/stats.html:43 +msgid "Plugin support enabled" +msgstr "" + +#: templates/stats.html:45 +msgid "Plugin support disabled" +msgstr "" + +#: templates/stats.html:52 +msgid "Server status" +msgstr "" + +#: templates/stats.html:55 +msgid "Healthy" +msgstr "" + +#: templates/stats.html:57 +msgid "Issues detected" +msgstr "" + +#: templates/stats.html:64 +msgid "Background Worker" +msgstr "" + +#: templates/stats.html:67 +msgid "Background worker not running" +msgstr "" + +#: templates/stats.html:75 +msgid "Email Settings" +msgstr "" + +#: templates/stats.html:78 +msgid "Email settings not configured" +msgstr "" + +#: templates/yesnolabel.html:4 +msgid "Yes" +msgstr "" + +#: templates/yesnolabel.html:6 +msgid "No" +msgstr "" + +#: users/admin.py:104 +msgid "Users" +msgstr "" + +#: users/admin.py:105 +msgid "Select which users are assigned to this group" +msgstr "" + +#: users/admin.py:249 +msgid "The following users are members of multiple groups" +msgstr "" + +#: users/admin.py:283 +msgid "Personal info" +msgstr "" + +#: users/admin.py:285 +msgid "Permissions" +msgstr "" + +#: users/admin.py:288 +msgid "Important dates" +msgstr "" + +#: users/authentication.py:29 users/models.py:138 +msgid "Token has been revoked" +msgstr "" + +#: users/authentication.py:32 +msgid "Token has expired" +msgstr "" + +#: users/models.py:81 +msgid "API Token" +msgstr "" + +#: users/models.py:82 +msgid "API Tokens" +msgstr "" + +#: users/models.py:118 +msgid "Token Name" +msgstr "" + +#: users/models.py:119 +msgid "Custom token name" +msgstr "" + +#: users/models.py:125 +msgid "Token expiry date" +msgstr "" + +#: users/models.py:133 +msgid "Last Seen" +msgstr "" + +#: users/models.py:134 +msgid "Last time the token was used" +msgstr "" + +#: users/models.py:138 +msgid "Revoked" +msgstr "" + +#: users/models.py:384 +msgid "Permission set" +msgstr "" + +#: users/models.py:393 +msgid "Group" +msgstr "" + +#: users/models.py:397 +msgid "View" +msgstr "" + +#: users/models.py:397 +msgid "Permission to view items" +msgstr "" + +#: users/models.py:401 +msgid "Permission to add items" +msgstr "" + +#: users/models.py:405 +msgid "Change" +msgstr "" + +#: users/models.py:407 +msgid "Permissions to edit items" +msgstr "" + +#: users/models.py:413 +msgid "Permission to delete items" +msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 0dd2fb4c1b..b6b2641167 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: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:55\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "API endpoint không tồn tại" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "Người dùng không được phân quyền xem mẫu này" @@ -56,26 +56,26 @@ msgstr "Chi tiết lỗi có thể được tìm thấy trong bảng quản tr msgid "Enter date" msgstr "Nhập ngày" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "Ghi chú" @@ -132,7 +132,7 @@ msgstr "Miền email được cung cấp không được phê duyệt." msgid "Registration is disabled." msgstr "Đăng ký bị vô hiệu hóa." -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "Tiếng Thổ Nhĩ Kỳ" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "Tiếng Việt" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "Tiếng Trung (Giản thể)" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "Tiếng Trung (Phồn thể)" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "Siêu dữ liệu phải là đối tượng từ điển của python" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "Phụ trợ siêu dữ liệu" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "Trường siêu dữ liệu JSON, được sử dụng bởi phụ trợ bên ngoài" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "Mẫu được định dạng không thích hợp" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "Khóa định dạng không rõ ràng đã được chỉ định" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "Thiếu khóa định dạng cần thiết" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "Trường tham chiếu không thể rỗng" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "Tham chiếu phải phù hợp với mẫu yêu cầu" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "Số tham chiếu quá lớn" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "Tập tin bị thiếu" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "Thiếu liên kết bên ngoài" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "Đính kèm" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "Chọn file đính kèm" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "Liên kết" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "Liên kết đến URL bên ngoài" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "Bình luận" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "Bình luận tệp tin" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "Người dùng" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "Ngày tải lên" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "Tên tập tin không được để trống" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "Thư mục đính kèm không hợp lệ" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "Tên tập tin chứa ký tự không hợp lệ '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "Tên tệp tin thiếu phần mở rộng" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "Tên của tệp đính kèm này đã tồn tại" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "Lỗi khi đổi tên tệp tin" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 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:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "Lựa chọn sai" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "Lựa chọn sai" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "Tên" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "Mô tả" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "thư mục cha" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "Đường dẫn" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "Ghi chú markdown (không bắt buộc)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "Dữ liệu mã vạch" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "Dữ liệu mã vạch của bên thứ ba" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "Dữ liệu băm mã vạch" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 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:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "Mã vạch đã tồn tại" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "Lỗi máy chủ" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "Lỗi đã được ghi lại bởi máy chủ." -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "URL của tệp hình ảnh bên ngoài" msgid "Downloading images from remote URL is not enabled" msgstr "Chức năng tải hình ảnh từ URL bên ngoài không được bật" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "Nhân công chạy ngầm kiểm tra thất bại" @@ -694,202 +698,6 @@ msgstr "Chưa cấu hình dịch vụ gửi email" msgid "InvenTree system health checks failed" msgstr "Kiểm tra tình trạng hệ thống InvenTree thất bại" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "Đợi duyệt" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "Đã đặt" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "Hoàn thành" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "Đã hủy" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "Mất" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "Đã trả lại" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "Đang tiến hành" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "Đã chuyển" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "Đồng ý" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "Chú ý cần thiết" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "Bị hư hại" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "Đã hủy" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "Đã từ chối" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "Đã cách ly" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "Mục theo dõi kho cổ điển" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "Kho hàng đã được khởi tạo" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "Sửa kho hàng" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "Số sê ri đã được gán" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "Kho đã đếm" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "Kho được thêm thủ công" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "Kho được xóa thủ công" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "Vị trí đã thay đổi" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "Kho hàng đã được cập nhật" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "Đã cài đặt vào bộ phận lắp ráp" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "Di rời khỏi bộ phận lắp ráp" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "Mục thành phần đã cài đặt" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "Mục thành phần đã di rời" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "Tách từ mục cha" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "Tách mục con" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "Kho hàng đã được gộp" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "Đã chuyển đổi sang biến thể" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "Đầu ra đơn đặt bản dựng đã được tạo" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "Đầu ra đơn đặt bản dựng đã hoàn thành" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "Đầu ra đơn đặt bản dựng bị từ chối" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "Tiêu hao bởi đơn đặt bản dựng" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "Vận chyển dựa vào đơn đặt bản dựng" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "Đã nhận dựa vào đơn đặt hàng mua" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "Trả hành dựa vào đơn hàng trả lại" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "Gửi đến khách hàng" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "Bị trả lại từ khách hàng" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "Sản xuất" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "Trả lại" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "Sửa chữa" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "Thay thế" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "Hoàn tiền" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "Từ chối" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "Không rõ cơ sở dữ liệu" @@ -938,45 +746,45 @@ msgstr "Thông tin hệ thống" msgid "About InvenTree" msgstr "Giới thiệu" -#: build/api.py:238 +#: build/api.py:255 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:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "Đã cấp phát" msgid "Available" msgstr "Có sẵn" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "Tạo đơn hàng" msgid "Build Orders" msgstr "Tạo đơn hàng" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "Lựa chọn sai cho bản dựng cha" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 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:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "Tham chiếu" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "Phiên bản cha" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "Đơn đặt bản dựng với bản dựng này đã được phân bổ" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "Nguyên liệu" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "Chọn sản phẩm để xây dựng" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "Đơn đặt bán hàng với bản dựng này đã được phân bổ" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "Địa điểm nguồn" -#: build/models.py:231 +#: build/models.py:261 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:236 +#: build/models.py:266 msgid "Destination Location" msgstr "Địa điểm đích" -#: build/models.py:240 +#: build/models.py:270 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:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "Xây dựng số lượng" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "Số kho hàng để dựng" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "Những mục hoàn thành" -#: build/models.py:253 +#: build/models.py:283 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:257 +#: build/models.py:287 msgid "Build Status" msgstr "Trnạg thái bản dựng" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "Ngày tạo" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "Ngày hoàn thành mục tiêu" -#: build/models.py:282 +#: build/models.py:312 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:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "hoàn thành bởi" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "Cấp bởi" -#: build/models.py:300 +#: build/models.py:330 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:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "Chịu trách nhiệm" -#: build/models.py:309 +#: build/models.py:339 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:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "Liên kết bên ngoài" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "Độ ưu tiên" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "Mã dự án" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, 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:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:811 +#: build/models.py:853 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:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 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:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1403 +#: build/models.py:1472 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:1412 +#: build/models.py:1481 #, 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:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "Số lượng phân bổ phải lớn hơn 0" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1493 +#: build/models.py:1562 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:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:1579 +#: build/models.py:1648 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:1587 +#: build/models.py:1656 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "Kho hàng đích" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:172 +#: build/serializers.py:169 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:176 +#: build/serializers.py:173 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:180 +#: build/serializers.py:177 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:191 +#: build/serializers.py:188 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:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:269 +#: build/serializers.py:276 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:272 +#: build/serializers.py:279 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:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:288 +#: build/serializers.py:295 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:301 -msgid "Auto Allocate Serial Numbers" -msgstr "Số sêri tự cấp" - -#: build/serializers.py:302 -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:337 stock/api.py:995 -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:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "Danh sách đầu ra bản dựng phải được cung cấp" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "Địa điểm" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "Số sêri tự cấp" + +#: build/serializers.py:316 +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:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +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:403 build/serializers.py:465 build/serializers.py:554 +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:442 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:434 +#: build/serializers.py:449 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:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "Trạng thái" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:512 +#: build/serializers.py:527 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:592 -msgid "Remove Allocated Stock" -msgstr "Xóa phân kho" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" +msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" -msgstr "Trừ số lượng bất kỳ kho nào được phân bổ đến bản dựng này" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" +msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:600 +#: build/serializers.py:620 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:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:628 +#: build/serializers.py:648 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:629 +#: build/serializers.py:649 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:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:653 +#: build/serializers.py:681 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:663 +#: build/serializers.py:691 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:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:669 +#: build/serializers.py:697 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:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 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:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:685 +#: build/serializers.py:713 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:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 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:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 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:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:752 +#: build/serializers.py:788 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:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part phải trỏ đến phần tương tự của đơn đặt bản dựng" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:871 +#: build/serializers.py:907 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:878 +#: build/serializers.py:914 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:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:965 +#: build/serializers.py:1001 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:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:974 +#: build/serializers.py:1010 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:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:980 +#: build/serializers.py:1016 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:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:992 +#: build/serializers.py:1028 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:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "Bật đơn hàng" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "Đợi duyệt" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "Sản xuất" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "Đã hủy" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "Hoàn thành" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "Kho được yêu cầu cho đặt hàng bản dựng" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "Đơn đặt bản dựng quá hạn" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "Kho không được phân bổ đầy đủ với yêu cầu bản dựng này" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "Ngày mục tiêu" @@ -1846,7 +1697,7 @@ msgstr "Bản dựng đã đến hạn vào %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "Đầu ra hoàn thiện" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "Đơn đặt hàng" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "Phát hành bởi" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "Độ ưu tiên" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "Nguồn kho" msgid "Stock can be taken from any available location." msgstr "Kho có thể được lấy từ bất kỳ địa điểm nào." -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "Đích đến" @@ -1926,10 +1777,10 @@ msgstr "Sản phẩm đã phân bổ" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "Hàng loạt" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "Đã tạo" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "Chưa đặt ngày mục tiêu" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "Đã hoàn thành" @@ -2043,11 +1894,11 @@ msgstr "Tập tin đính kèm" msgid "Build Notes" msgstr "Ghi chép bản dựng" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1485 @@ msgstr "Mô tả dự án" 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:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "Khóa thiết lập (phải duy nhất - phân biệt hoa thường)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "Giá trị cài đặt" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "Giá trị đã chọn không hợp lệ" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "Giá trị phải là kiểu boolean" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "Giá trị phải là một số nguyên dương" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "Chuỗi khóa phải duy nhất" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "Không có nhóm" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "Tên miền rỗng là không được phép." -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "Tên miền không hợp lệ: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "Không phần mở rộng" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "Cần khởi động lại" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "Một thiết lập đã bị thay đổi yêu cầu khởi động lại máy chủ" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "Chuyển dữ liệu chờ xử lý" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "Số đợt nâng cấp cơ sở dữ liệu chờ xử lý" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "Tên thực thể máy chủ" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "Mô tả chuỗi cho thực thể máy chủ" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "Sử dụng tên thực thể" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "Sử dụng tên thực thể trên thanh tiêu đề" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "Cấm hiển thị `giới thiệu`" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "Chỉ hiển thị cửa sổ `giới thiệu` với siêu người dùng" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "Tên công ty" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "Tên công ty nội bộ" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "URL cơ sở" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "URL cơ sở cho thực thể máy chủ" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "Tiền tệ mặc định" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "Chọn tiền tệ chính khi tính giá" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "Tần suất cập nhật tiền tệ" -#: common/models.py:1313 +#: common/models.py:1314 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/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "ngày" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "Phần mở rộng cập nhật tiền tệ" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "Phần mở rộng cập nhật tiền tệ được sử dụng" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "Tải về từ URL" -#: common/models.py:1328 +#: common/models.py:1329 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/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "Giới hạn kích thước tải xuống" -#: common/models.py:1335 +#: common/models.py:1336 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/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "User-agent được dùng để tải xuống theo URL" -#: common/models.py:1343 +#: common/models.py:1344 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/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "Yêu cầu xác nhận" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "Yêu cầu người dùng xác nhận rõ ràng với một số chức năng nhất định." -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "Cấp độ cây" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "Độ sâu cây mặc định cho màn hình cây. Cấp độ sâu hơn sẽ sử dụng kỹ thuật tải chậm nếu cần thiết." -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "Thời gian kiểm tra bản cập nhật" -#: common/models.py:1369 +#: common/models.py:1370 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/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "Sao lưu tự động" -#: common/models.py:1376 +#: common/models.py:1377 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/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "Khoảng thời gian sao lưu tự động" -#: common/models.py:1382 +#: common/models.py:1383 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/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "Khoảng thời gian xóa tác vụ" -#: common/models.py:1390 +#: common/models.py:1391 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/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "Khoảng thời gian xóa nhật ký lỗi" -#: common/models.py:1399 +#: common/models.py:1400 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/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "Khoảng thời gian xóa thông báo" -#: common/models.py:1408 +#: common/models.py:1409 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/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "Hỗ trợ mã vạch" -#: common/models.py:1416 +#: common/models.py:1417 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/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "Độ trễ quét mã vạch" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "Thời gian trễ xử lý đầu đọc mã vạch" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "Hỗ trợ mã vạch qua webcam" -#: common/models.py:1429 +#: common/models.py:1430 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/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "Phiên bản Sản phẩm" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "Bật trường phiên bản cho sản phẩm" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "Mẫu IPN" -#: common/models.py:1441 +#: common/models.py:1448 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/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "Cho phép trùng IPN" -#: common/models.py:1445 +#: common/models.py:1452 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/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "Cho phép sửa IPN" -#: common/models.py:1451 +#: common/models.py:1458 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/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "Sao chép dữ liệu BOM của sản phẩm" -#: common/models.py:1457 +#: common/models.py:1464 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/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "Sao chép dữ liệu tham số sản phẩm" -#: common/models.py:1463 +#: common/models.py:1470 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/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "Chép thông tin kiểm thử sản phẩm" -#: common/models.py:1469 +#: common/models.py:1476 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/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "Sao chéo mẫu tham số danh mục" -#: common/models.py:1475 +#: common/models.py:1482 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/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "Mẫu" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "Lắp ráp" -#: common/models.py:1487 +#: common/models.py:1494 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/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "Thành phần" -#: common/models.py:1493 +#: common/models.py:1500 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/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "Có thể mua" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "Có thể bán" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "Sản phẩm mặc định có thể bán được" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "Có thể theo dõi" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "Ảo" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "Sản phẩm mặc định là số hóa" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "Hiển thị Nhập liệu trong khung xem" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "Hiển thị đồ thuật nhập dữ liệu trong một số khung nhìn sản phẩm" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "Hiển thị sản phẩm liên quan" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "Hiện sản phẩm liên quan cho 1 sản phẩm" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "Số liệu tồn kho ban đầu" -#: common/models.py:1535 +#: common/models.py:1542 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/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "Dữ liệu nhà cung cấp ban đầu" -#: common/models.py:1542 +#: common/models.py:1549 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/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "Định dạng tên sản phẩm hiển thị" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "Định dạng để hiển thị tên sản phẩm" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "Biểu tượng mặc định của danh mục sản phẩm" -#: common/models.py:1556 +#: common/models.py:1563 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/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "Bắt buộc đơn vị tham số" -#: common/models.py:1562 +#: common/models.py:1569 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/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối thiểu" -#: common/models.py:1570 +#: common/models.py:1577 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/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối đa" -#: common/models.py:1578 +#: common/models.py:1585 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/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "Sử dụng giá bán nhà cung cấp" -#: common/models.py:1586 +#: common/models.py:1593 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/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "Ghi đè lịch sử mua hàng" -#: common/models.py:1594 +#: common/models.py:1601 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/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "Sử dụng giá hàng hóa trong kho" -#: common/models.py:1602 +#: common/models.py:1609 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/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "Tuổi giá kho hàng" -#: common/models.py:1610 +#: common/models.py:1617 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/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "Sử dụng giá biến thể" -#: common/models.py:1618 +#: common/models.py:1625 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/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "Chỉ các biến thể hoạt động" -#: common/models.py:1625 +#: common/models.py:1632 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/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "Tần suất tạo lại giá" -#: common/models.py:1633 +#: common/models.py:1640 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/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "Giá nội bộ" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "Bật giá nội bộ cho sản phẩm" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "Ghi đè giá nội bộ" -#: common/models.py:1648 +#: common/models.py:1655 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/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "Bật in tem nhãn" -#: common/models.py:1655 +#: common/models.py:1662 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/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "DPI hỉnh ảnh tem nhãn" -#: common/models.py:1662 +#: common/models.py:1669 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/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "Bật báo cáo" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "Cho phép tạo báo cáo" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "Chế độ gỡ lỗi" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "Tạo báo cáo trong chế độ gỡ lỗi (đầu ra HTML)" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "Khổ giấy" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "Kích thước trang mặc định cho báo cáo PDF" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "Bật báo cáo kiểm thử" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "Cho phép tạo báo cáo kiểm thử" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "Đính kèm báo cáo kiểm thử" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "Khi in một báo cáo kiểm thử, đính kèm một bản sao của báo cáo kiểm thử với hàng trong kho đã được kết hợp" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "Sê ri toàn cục duy nhất" -#: common/models.py:1707 +#: common/models.py:1714 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/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "Tự động điền số sê ri" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "Tự động điền số sê ri vào biểu mẫu" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "Xóa kho đã hết hàng" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "Mẫu sinh mã theo lô" -#: common/models.py:1728 +#: common/models.py:1735 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/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "Quá hạn trong kho" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "Bật chức năng quá hạn tồn kho" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "Bán kho quá hạn" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "Cho phép bán hàng kho quá hạn" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "Thời gian hàng cũ trong kho" -#: common/models.py:1747 +#: common/models.py:1754 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/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "Dựng kho quá hạn" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "Cho phép xây dựng với kho hàng quá hạn" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "Kiểm soát sở hữu kho" -#: common/models.py:1761 +#: common/models.py:1768 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/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "Biểu tượng địa điểm kho mặc định" -#: common/models.py:1767 +#: common/models.py:1774 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/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "Hiển thị hàng hóa đã lắp đặt" -#: common/models.py:1772 +#: common/models.py:1779 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/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "Mã tham chiếu đơn đặt bản dựng" -#: common/models.py:1787 +#: common/models.py:1802 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/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "Bật đơn hàng trả lại" -#: common/models.py:1808 +#: common/models.py:1823 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/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "Mẫu tham chiếu đơn hàng trả lại" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "Sửa đơn hàng trả lại đã hoàn thành" -#: common/models.py:1829 +#: common/models.py:1844 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/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt hàng" -#: common/models.py:1837 +#: common/models.py:1852 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/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "Vận chuyển mặc định đơn đặt hàng" -#: common/models.py:1850 +#: common/models.py:1865 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/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "Sửa đơn đặt hàng đã hoàn thành" -#: common/models.py:1857 +#: common/models.py:1872 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/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Mark order as complete" +msgid "Mark Shipped Orders as Complete" +msgstr "Đánh dấu đơn đặt đã hoàn thành" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt mua" -#: common/models.py:1865 +#: common/models.py:1888 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/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "Sửa đơn đặt mua đã hoàn thành" -#: common/models.py:1879 +#: common/models.py:1902 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/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "Tự động hoàn thành đơn đặt mua" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "Bật quên mật khẩu" -#: common/models.py:1895 +#: common/models.py:1918 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/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "Bật đăng ký" -#: common/models.py:1901 +#: common/models.py:1924 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/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "Bật SSO" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "Cho phép SSO tại trang đăng nhập" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "Bật đăng ký SSO" -#: common/models.py:1914 +#: common/models.py:1937 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/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "Yêu cầu email" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "Yêu cầu người dùng cung cấp email để đăng ký" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "Người dùng tự động điền SSO" -#: common/models.py:1928 +#: common/models.py:1951 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/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "Thư 2 lần" -#: common/models.py:1935 +#: common/models.py:1958 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/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "Mật khẩu 2 lần" -#: common/models.py:1941 +#: common/models.py:1964 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/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "Các tên miền được phép" -#: common/models.py:1948 +#: common/models.py:1971 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/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "Nhóm khi đăng ký" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "Nhóm được gán cho người dùng mới khi đăng ký" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "Bắt buộc MFA" -#: common/models.py:1961 +#: common/models.py:1984 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/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "Kiểm tra phần mở rộng khi khởi động" -#: common/models.py:1968 +#: common/models.py:1991 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/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "Kiểm tra cập nhật plugin" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "Bật tích hợp URL" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "Bật phần mở rộng để thêm định tuyến URL" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "Bật tích hợp điều hướng" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "Bật phần mở rộng để tích hợp thanh định hướng" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "Bật tích hợp ứng dụng" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "Bật phần mở rộng để thêm ứng dụng" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "Cho phép tích hợp lập lịch" -#: common/models.py:2005 +#: common/models.py:2028 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/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "Bật tích hợp nguồn cấp sự kiện" -#: common/models.py:2012 +#: common/models.py:2035 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/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "Bật mã dự án" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "Bật mã dự án để theo dõi dự án" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "Chức năng kiểm kê" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "Bật chức năng kiểm kê theo mức độ ghi nhận kho và tính toán giá trị kho" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "Ngoại trừ vị trí bên ngoài" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Loại trừ hàng trong kho thuộc địa điểm bên ngoài ra khỏi tính toán kiểm kê" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "Giai đoạn kiểm kê tự động" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "Số ngày giữa ghi chép kiểm kê tự động (đặt không để tắt)" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "Khoảng thời gian xóa báo cáo" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "Báo cáo kiểm kê sẽ bị xóa sau số ngày xác định" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "Hiển thị tên đầy đủ của người dùng" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "Hiển thị tên đầy đủ thay vì tên đăng nhập" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "Khóa thiết lập (phải duy nhất - phân biệt hoa thường" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "Ẩn sản phẩm ngừng hoạt động" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "Ẩn sản phẩm bị tắt trong kết quả trình bày tại trang chủ" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "Hiện sản phẩm đã đăng ký" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "Hiện sản phẩm đã đăng ký trên trang chủ" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "Hiện danh mục đã đăng ký" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "Hiện danh mục sản phẩm đã đăng ký trên trang chủ" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "Hiển thị nguyên liệu mới nhất" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "Hiển thị nguyên liệu mới nhất trên trang chủ" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "Hiện BOM chờ xác thực tại trang chủ" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "Hiện thay đổi kho hàng gần đây" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "Hiện hàng trong kho được thay đổi gần nhất trên trang chủ" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "Hiển thị hàng còn ít" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "Hiển thị hàng hóa còn ít tại trang chủ" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "Hiển thị hết hàng" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "Hiển thị hàng hóa đã bán hết tại trang chủ" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "Hiển thị hàng cần thiết" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "Hiện hàng trong kho cần thiết cho xây dựng tại trang chủ" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "Bán kho quá hạn" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "Hiển thị hàng hóa đã quá hạn trên trang chủ" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "Hiện kho hàng ế" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "Hiện hàng trong kho bị ế trên trang chủ" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "Hiện bản dựng chờ xử lý" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "Hiện bản dựng chờ xử lý trên trang chủ" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "Hiện bản dựng quá hạn" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "Hiện bản dựng quá hạn trên trang chủ" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "Hiện PO nổi bật" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "Hiện PO nổi bật trên trang chủ" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "Hiện PO quá hạn" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "Hiện đơn mua hàng quá hạn trên trang chủ" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "Hiện đơn hàng vận chuyển nổi bật" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "Hiện đơn hàng vận chuyển nổi bật tại trang chủ" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "Hiện đơn vận chuyển quá hạn" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "Hiện đơn vận chuyển quá hạn trên trang chủ" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "Hiện đơn vận chuyển chờ xử lý" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "Hiện đơn vận chuyển chờ xử lý trên trang chủ" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "Hiện tin tức" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "Hiện tin tức trên trang chủ" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "Hiển thị nhãn cùng dòng" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "Hiển thị nhãn PDF trong trình duyệt, thay vì tải về dạng tệp tin" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "Máy in tem nhãn mặc định" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "Cấu hình máy in tem nhãn nào được chọn mặc định" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "Hiển thị báo cáo cùng hàng" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "Hiện báo cáo PDF trong trình duyệt, thay vì tải về dạng tệp tin" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "Tìm sản phẩm" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "Hiện hàng hóa trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "Tìm sản phẩm nhà cung cấp" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "Hiện sản phẩm nhà cung cấp trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "Tìm sản phẩm nhà sản xuất" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "Hiện sản phẩm nhà sản xuất trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "Ẩn sản phẩm ngừng hoạt động" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "Loại trừ sản phẩm ngưng hoạt động trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "Tìm kiếm danh mục" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "Hiện danh mục sản phẩm trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "Tìm kiếm kho" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "Hiện hàng hóa ở kho trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "Ẩn hàng hóa trong kho không có sẵn" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "Không bao gồm hàng hóa trong kho mà không sẵn sàng từ màn hình xem trước tìm kiếm" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "Tìm kiếm vị trí" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "Hiện vị trí kho hàng trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "Tìm kiếm công ty" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "Hiện công ty trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "Tìm kiếm đặt hàng xây dựng" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "Hiện đơn đặt xây dựng trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "Tìm kiếm đơn đặt mua" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "Hiện đơn đặt mua trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "Loại trừ đơn đặt mua không hoạt động" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "Loại trừ đơn đặt mua không hoạt động ra khỏi cửa sổ xem trước tìm kiếm" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "Tìm đơn đặt hàng người mua" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "Hiện đơn đặt hàng người mua trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "Loại trừ đơn đặt hàng người mua không hoạt động" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "Không bao gồm đơn đặt hàng người mua không hoạt động trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "Tìm kiếm đơn hàng trả lại" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "Hiện đơn hàng trả lại trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "Loại trừ đơn hàng trả lại không hoạt động" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "Không bao gồm đơn hàng trả lại không hoạt động trong cửa sổ xem trước tìm kiếm" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "Kết quả xem trước tìm kiếm" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "Số kết quả cần hiển thị trong từng phần của cửa sổ xem trước tìm kiếm" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "Tìm kiếm biểu thức" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "Bật tìm kiếm biểu thức chính quy trong câu truy vấn tìm kiếm" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "Tìm phù hợp toàn bộ chữ" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "Truy vấn tìm trả về kết quả phù hợp toàn bộ chữ" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "Hiện số lượng trong biểu mẫu" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "Hiển thị số lượng sản phẩm có sẵn trong một số biểu mẫu" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "Phím escape để đóng mẫu biểu" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "Sử dụng phím escape để đóng mẫu biểu hộp thoại" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "Cố định điều hướng" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "Vị trí thành điều hướng là cố định trên cùng màn hình" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "Định dạng ngày" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "Định dạng ưa chuộng khi hiển thị ngày" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "Lập lịch sản phẩm" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "Hiển thị thông tin lịch sản phẩm" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "Kiểm kê sản phẩm" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "Hiển thị thông tin kiểm kê sản phẩm (nếu chức năng kiểm kê được bật)" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "Độ dài chuỗi trong bảng" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "Giới hạn độ dài tối đa cho chuỗi hiển thị trong kiểu xem bảng biểu" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "Mẫu nhãn sản phẩm mặc định" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "Mẫu nhãn sản phẩm mặc định được chọn tự động" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "Mẫu hàng hóa trong khi mặc định" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "Mẫu nhãn hàng hóa trong kho tự động được chọn" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "Mẫu nhãn vị trí kho mặc định" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "Mẫu nhãn vị trí kho được chọn tự động" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "Nhận báo cáo lỗi" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "Nhận thông báo khi có lỗi hệ thống" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "Giá" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "Đơn vị giá theo số lượng cụ thể" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "Đầu mối" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "Đầu mối tại điểm webhook được nhận" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3464,135 @@ msgstr "Tên của webhook này" msgid "Active" msgstr "Hoạt động" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "Webhook có hoạt động không" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "Chữ ký số" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "Chữ ký số để truy cập" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "Bí mật" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "Máy chủ" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "Mãy chủ từ tin nhắn này đã được nhận" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "Đầu mục" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "Đầu mục tin nhắn" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "Thân" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "Thân tin nhắn này" -#: common/models.py:2882 +#: common/models.py:2905 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:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "Làm việc vào" -#: common/models.py:2888 +#: common/models.py:2911 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:3014 +#: common/models.py:3037 msgid "Id" msgstr "Mã" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "Tiêu đề" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "Đã công bố" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "Tác giả" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "Đọc" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "Tin này đã được đọc?" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "Hình ảnh" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "Tệp ảnh" -#: common/models.py:3086 +#: common/models.py:3109 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:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "Tên đơn vị" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "Biểu tượng" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "Biểu tượng đơn vị tùy chọn" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "Định nghĩa" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "Định nghĩa đơn vị" @@ -3736,7 +3614,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:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "Mục đã nhận" @@ -3752,63 +3630,63 @@ msgstr "Hàng đã nhận theo đơn hàng trả lại" msgid "Error raised by plugin" msgstr "Lỗi được thông báo bởi phần mở rộng" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "Đang chạy" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "Công việc chờ xử lý" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "Tác vụ theo lịch" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "Tác vụ thất bại" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "ID tác vụ" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "ID tác vụ duy nhất" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "Khoá" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "Thời gian khóa" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "Tên công việc" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "Chức năng" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "Tên chức năng" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "Đối số" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "Đối số công việc" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "Đối số từ khóa" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "Đối số từ khóa công việc" @@ -3901,9 +3779,9 @@ msgid "Contact email address" msgstr "Địa chỉ email liên hệ" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "Liên hệ" @@ -3949,7 +3827,7 @@ msgstr "Tiền tệ mặc định dùng cho công ty này" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "Doanh nghiêp" @@ -4041,19 +3919,19 @@ 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:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "Sản phẩm cơ bản" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "Chọn sản phẩm" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3946,13 @@ msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3964,60 @@ msgstr "Mã số nhà sản xuất" msgid "URL for external manufacturer part link" msgstr "URL cho liên kết sản phẩm của nhà sản xuất bên ngoài" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "Mô tả sản phẩm của nhà sản xuất" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "Tên tham số" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "Giá trị" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "Giá trị tham số" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "Đơn vị" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "Đơn vị tham số" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "Đơn vị đóng gói phải tương thích với đơn vị sản phẩm cơ bản" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "Đơn vị đóng gói phải lớn hơn không" -#: company/models.py:752 +#: company/models.py:753 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:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4025,97 @@ msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu vớ #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "Nhà cung cấp" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "Chọn sản phẩm của nhà sản xuất" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "URL cho liên kết sản phẩm của nhà cung cấp bên ngoài" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "Ghi chú" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "Đóng gói" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "Đóng gói sản phẩm" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "Số lượng gói" -#: company/models.py:871 +#: company/models.py:873 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:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "nhiều" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "Đặt hàng nhiều" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "Số lượng có sẵn từ nhà cung cấp" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "Sẵn hàng đã được cập nhật" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "Ngày cập nhật cuối thông tin tồn kho" @@ -4257,7 +4134,7 @@ msgstr "Còn hàng" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "Không hoạt động" @@ -4293,11 +4170,11 @@ msgstr "Xóa doanh nghiệp" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "Ảnh sản phẩm" @@ -4316,15 +4193,15 @@ msgstr "Tải hình ảnh từ URL" msgid "Delete image" msgstr "Xóa ảnh" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4211,10 @@ msgstr "Khách hàng" msgid "Uses default currency" msgstr "Dùng tiền mặc định" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "Địa chỉ" @@ -4346,7 +4223,7 @@ msgid "Phone" msgstr "Điện thoại" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "Xoá hình ảnh" @@ -4355,19 +4232,19 @@ msgid "Remove associated image from this company" msgstr "Xóa hình ảnh gắn với công ty này" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "Xóa" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "Tải hình lên" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "Tải ảnh xuống" @@ -4520,7 +4397,7 @@ msgid "Delete manufacturer part" msgstr "Xóa sản phẩm của nhà sản xuất" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "Sản phẩm nội bộ" @@ -4530,7 +4407,7 @@ msgstr "Chưa có thông tin nhà sản xuất" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4457,11 @@ msgid "Addresses" msgstr "Địa chỉ" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "Sản phẩm nhà cung cấp" @@ -4630,11 +4507,11 @@ msgid "No supplier information available" msgstr "Chưa có thông tin nhà cung cấp" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4520,12 @@ msgid "Supplier Part Stock" msgstr "Kho sản phẩm nhà cung cấp" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "Thêm mới hàng trong kho" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "Hàng trong kho mới" @@ -4680,13 +4557,13 @@ msgid "Update Part Availability" msgstr "Cập nhật độ sẵn sàng sản phẩm" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4600,52 @@ msgstr "Doanh nghiệp" msgid "New Company" msgstr "Doanh nghiệp mới" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "Đã đặt" -#: label/models.py:120 -msgid "Label name" -msgstr "Tên nhãn" - -#: label/models.py:128 -msgid "Label description" -msgstr "Mô tả nhãn" - -#: label/models.py:136 -msgid "Label" -msgstr "Nhãn" - -#: label/models.py:137 -msgid "Label template file" -msgstr "Tệp mẫu nhãn" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "Đã bật" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "Mẫu nhãn đã bật" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "Chiều rộng [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "Chiều rộng nhãn, tính theo mm" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "Chiều cao [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "Chiều cao nhãn, tính theo mm" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "Mẫu tên tệp" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "Mẫu dùng để tạo tên tệp nhãn" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "Truy vấn bộ lọc (dùng dấu phẩy ngăn cách các cặp key=value)" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "Bộ lọc" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "Mã QR" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "Mã QR" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "Không rõ" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4706,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "Tổng tiền" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "Trạng thái đặt hàng" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "Không tìm thấy đơn đặt mua phù hợp" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "Đặt hàng" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "Đơn hàng trả lại" @@ -4976,517 +4780,577 @@ msgstr "Tiền tệ đơn đặt hàng" 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:246 +#: order/models.py:247 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:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "Mô tả đơn đặt (tùy chọn)" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "Mã dự án đã chọn cho đơn đặt hàng này" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "Liên kết đến trang bên ngoài" -#: order/models.py:299 +#: order/models.py:311 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:313 +#: order/models.py:325 msgid "Created By" msgstr "Tạo bởi" -#: order/models.py:321 +#: order/models.py:333 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:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "Đầu mối liên hệ của đơn đặt này" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "Địa chỉ công ty cho đơn đặt này" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "Mã đặt hàng" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "Trạng thái đơn đặt mua" -#: order/models.py:466 +#: order/models.py:487 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:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "Tham chiếu nhà cung cấp" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "Mã tham chiếu đơn đặt nhà cung cấp" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "nhận bởi" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "Ngày phát hành" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "Ngày đặt hàng đã phát hành" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "Ngày đặt hàng đã được hoàn thiện" -#: order/models.py:545 +#: order/models.py:566 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:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "Số lượng phải là số dương" -#: order/models.py:911 +#: order/models.py:941 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:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "Tham chiếu khách hàng " -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "Mã tham chiếu đơn đặt của khách hàng" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "Ngày giao hàng" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "vận chuyển bằng" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "Đơn đặt hàng không thể hoàn thiện vì chưa có sản phẩm nào được chọn" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "Đơn đặt không thể bị hủy" + +#: order/models.py:1034 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:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 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:1013 +#: order/models.py:1043 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:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "Số lượng mặt hàng" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "Tham chiếu khoản riêng" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "Ghi chú khoản riêng" -#: order/models.py:1296 +#: order/models.py:1345 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:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "Mô tả khoản riêng (tùy chọn)" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "Ngữ cảnh" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "Ngữ cảnh bổ sung" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "Đơn giá" -#: order/models.py:1367 +#: order/models.py:1416 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:1374 +#: order/models.py:1423 msgid "deleted" msgstr "đã bị xóa" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "Sản phẩm nhà cung cấp" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "Đã nhận" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "Giá đơn vị mua" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "Có phải người mua hàng muốn mặt hàng này được tích trữ?" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "Không thể gán sản phẩm ảo vào trong đơn đặt bán hàng" -#: order/models.py:1528 +#: order/models.py:1579 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:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "Giá bán" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "Giá bán đơn vị" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "Đã chuyển" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "Số lượng đã vận chuyển" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "Ngày vận chuyển" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "Ngày giao hàng" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "Ngày giao hàng của vận chuyển" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "Kiểm tra bởi" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "Vận chuyển" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "Mã vận chuyển" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "Số theo dõi" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "Thông tin theo dõi vận chuyển" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "Mã hóa đơn" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "Số tham chiếu liên kết với hóa đơn" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "Vận đơn đã được gửi đi" -#: order/models.py:1721 +#: order/models.py:1772 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:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "Hàng trong kho chưa được giao" -#: order/models.py:1848 +#: order/models.py:1899 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:1851 +#: order/models.py:1902 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:1854 +#: order/models.py:1905 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:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 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:1876 +#: order/models.py:1927 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:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 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:1885 +#: order/models.py:1936 msgid "Line" msgstr "Dòng" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "Tham chiếu vận đơn của đơn hàng bán" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "Hàng hóa" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "Chọn hàng trong kho để phân bổ" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "Nhập số lượng phân kho" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "Tham chiếu đơn hàng trả lại" -#: order/models.py:2009 +#: order/models.py:2069 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:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "Trạng thái đơn hàng trả lại" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "Chỉ hàng hóa thêo sêri mới có thể được gán vào đơn hàng trả lại" -#: order/models.py:2216 +#: order/models.py:2276 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:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "Ngày nhận được" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "Ngày mà hàng hóa trả lại đã được nhận" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "Kết quả" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "Kết quả cho hàng hóa dòng này" -#: order/models.py:2242 +#: order/models.py:2302 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/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "Mục dòng" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 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:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 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:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "Mục dòng không phù hợp với đơn đặt mua" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "Cần điền số nguyên cho sản phẩm có thể theo dõi" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 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:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 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:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "Những số sê ri sau đây đã được phân bổ" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:1652 +#: order/serializers.py:1656 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:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:1684 +#: order/serializers.py:1688 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:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "Mất" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "Đã trả lại" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "Đang tiến hành" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "Trả lại" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "Sửa chữa" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "Thay thế" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "Hoàn tiền" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "Từ chối" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "Đơn đặt mua quá hạn" @@ -5553,7 +5417,7 @@ msgstr "Đánh dấu đơn đặt đã hoàn thành" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "Đơn đặt hoàn thành" @@ -5563,13 +5427,13 @@ msgstr "Ảnh thu nhỏ sản phẩm nhà cung cấp" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "Tham chiếu đơn đặt" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "Mô tả đơn đặt" @@ -5578,19 +5442,19 @@ msgid "No suppplier information available" msgstr "Chưa có thông tin nhà cung cấp" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "Mục dòng hoàn thành" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "Chưa hoàn thành" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "Đã cấp" @@ -5600,15 +5464,15 @@ msgstr "Tổng chi phí" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "Không thể tính tổng chi phí" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "Mã QR đơn đặt mua" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "Liên kết mã vạch đến đơn đặt mua" @@ -5662,11 +5526,11 @@ msgstr "Lựa chọn trùng lặp" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5572,6 @@ msgstr "Đơn đặt đã được xử lý. Không thể tải lên tệp tin." msgid "Step %(step)s of %(count)s" msgstr "Bước %(step)s của %(count)s" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "Mục dòng" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "Kho đã nhận hàng" @@ -5729,7 +5584,7 @@ msgstr "Hàng hóa đặt mua" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "Thêm mục dòng" @@ -5778,30 +5633,30 @@ msgid "Print packing list" msgstr "In danh sách đóng gói" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "Mã khách hàng" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "Tổng chi phí" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "Mã QR đơn hàng trả lại" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5674,30 @@ msgid "Ship Items" msgstr "Mục vận chuyển" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "Hoàn thành đơn bán hàng" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "Chưa phân bổ đầy đủ đơn bán hàng" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5741,12 @@ msgstr "Cập nhật {part} giá đơn vị đến {price}" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "Cập nhật {part} giá đơn vị đến {price} và số lượng đến {qty}" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "ID sản phẩm" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "Tên sản phẩm" @@ -5895,20 +5755,20 @@ msgstr "Tên sản phẩm" msgid "Part Description" msgstr "Mô tả sản phẩm" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "Phiên bản" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "Từ khóa" @@ -5917,15 +5777,15 @@ msgstr "Từ khóa" msgid "Part Image" msgstr "Ảnh sản phẩm" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "ID danh mục" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "Tên danh mục" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "ID vị trí mặc định" @@ -5933,11 +5793,11 @@ msgstr "ID vị trí mặc định" msgid "Default Supplier ID" msgstr "ID nhà cung ứng mặc định" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "Biến thể của" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "Kho tối thiểu" @@ -5950,160 +5810,164 @@ msgstr "Sử dụng trong" msgid "Building" msgstr "Đang dựng" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "ID cha" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "Tên cha" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "Đưỡng dẫn danh mục" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "Nguyên liệu" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "Cấp độ BOM" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "ID hàng hóa BOM" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "IPN cha" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "IPN sản phẩm" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "Đơn đặt mua vào" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "Đơn hàng bán ra" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "Kho sản xuất bởi Đơn đặt bản dựng" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "Kho được yêu cầu cho đơn đặt bản dựng" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "Hợp lệ" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "Tùy chọn này phải được chọn" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "Danh mục" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "Điểm bán mặc định" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "Tổng số lượng" @@ -6112,698 +5976,712 @@ msgstr "Tổng số lượng" msgid "Input quantity for price calculation" msgstr "Số lượng đầu ra cho tính toán giá bán" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "Danh mục sản phẩm" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "Danh mục sản phẩm" -#: part/models.py:102 +#: part/models.py:103 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:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "Cấu trúc" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Hàng hóa không được gán trực tiếp vào danh mục có cấu trúc nhưng có thể được gán vào danh mục con." -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "Từ khóa mặc định" -#: part/models.py:119 +#: part/models.py:120 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:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "Biểu tượng" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Bạn không thể thay đổi cấu trúc nhóm sản phẩm này vì một số sản phẩm đã được gắn với nó rồi!" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "Lựa chọn sai cho sản phẩm cha" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, 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:551 +#: part/models.py:594 #, 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:616 +#: part/models.py:659 #, 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:696 +#: part/models.py:739 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:801 +#: part/models.py:844 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:811 +#: part/models.py:854 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:826 +#: part/models.py:869 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:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "Tên sản phẩm" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "Là Mẫu" -#: part/models.py:861 +#: part/models.py:904 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:871 +#: part/models.py:914 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:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "Mô tả (không bắt buộc)" -#: part/models.py:887 +#: part/models.py:930 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:897 +#: part/models.py:940 msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" -#: part/models.py:912 +#: part/models.py:955 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:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "Hàng hóa này sẽ được cất vào đâu?" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "Nhà cung ứng mặc định" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "Nhà cung ứng sản phẩm mặc định" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "Hết hạn mặc định" -#: part/models.py:992 +#: part/models.py:1035 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:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "Cấp độ kho tối thiểu được phép" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "Đơn vị đo cho sản phẩm này" -#: part/models.py:1017 +#: part/models.py:1060 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:1023 +#: part/models.py:1066 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:1029 +#: part/models.py:1072 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:1035 +#: part/models.py:1078 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:1041 +#: part/models.py:1084 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:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "Sản phẩm này đang hoạt động?" -#: part/models.py:1051 +#: part/models.py:1094 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:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "Giá trị tổng kiểm BOM" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "Giá trị tổng kiểm BOM đã được lưu" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "BOM kiểm tra bởi" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "Ngày kiểm tra BOM" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "Tạo người dùng" -#: part/models.py:1097 +#: part/models.py:1140 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:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "Kiểm kê cuối cùng" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:2994 +#: part/models.py:3037 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:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3032 +#: part/models.py:3075 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:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3039 +#: part/models.py:3082 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:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3046 +#: part/models.py:3089 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:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3053 +#: part/models.py:3096 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:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3060 +#: part/models.py:3103 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:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3067 +#: part/models.py:3110 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:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3074 +#: part/models.py:3117 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:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3109 +#: part/models.py:3152 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:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3155 +#: part/models.py:3198 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:3163 +#: part/models.py:3206 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:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "Ngày" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "Ghi chú bổ sung" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "Người dùng đã thực hiện đợt kiểm kê này" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3193 +#: part/models.py:3236 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:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3200 +#: part/models.py:3243 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:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "Báo cáo" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "Tệp báo cáo kiểm kê (được sinh nội bộ)" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "Bộ đếm sản phẩm" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "Số sản phẩm đã được bao quát bởi kiểm kê" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "Người dùng đã yêu cầu báo cáo kiểm kê này" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "Chỉ có thể tạo mẫu kiểm thử cho sản phẩm có thể theo dõi" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "Đã bật" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3506 +#: part/models.py:3549 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:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3513 +#: part/models.py:3556 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:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "Tham số hộp kiểm tra không thể có lựa chọn" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "Tên tham số" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "Mô tả tham số" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "Ô lựa chọn" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "Lựa chọn" -#: part/models.py:3645 +#: part/models.py:3688 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)" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "Sản phẩm cha" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "Mẫu tham số" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "Dữ liệu" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "Giá trị tham số" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "Giá trị mặc định" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "Giá trị tham số mặc định" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "Tên hoặc mã sản phẩm" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "Giá trị mã sản phẩm duy nhất" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "Giá trị IPN sản phẩm" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "Cấp độ" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "Cấp độ BOM" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4048 +#: part/models.py:4091 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:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "Dư thừa" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "Số lượng bản dựng lãng phí ước tính (tuyệt đối hoặc phần trăm)" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4090 +#: part/models.py:4133 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:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: part/models.py:4096 +#: part/models.py:4139 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:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 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:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4354 +#: part/models.py:4397 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:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4419 +#: part/models.py:4462 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:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" @@ -6821,7 +6699,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "Loại tiền mua hàng của hàng hóa này" @@ -6837,299 +6715,299 @@ msgstr "Chưa chọn sản phẩm" msgid "Select category" msgstr "Chọn danh mục" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:451 +#: part/serializers.py:456 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:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "Sao chép thông số" -#: part/serializers.py:458 +#: part/serializers.py:463 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:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:480 +#: part/serializers.py:490 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:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:488 +#: part/serializers.py:498 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:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:516 +#: part/serializers.py:531 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:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:533 +#: part/serializers.py:548 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:542 +#: part/serializers.py:557 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:553 +#: part/serializers.py:568 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:560 +#: part/serializers.py:575 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:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:857 +#: part/serializers.py:874 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:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:864 +#: part/serializers.py:881 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:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:871 +#: part/serializers.py:888 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:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:880 +#: part/serializers.py:897 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:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:886 +#: part/serializers.py:903 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:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "Hạn chế báo cáo kiểm kê với sản phẩm riêng biệt và sản phẩm biến thể bất kỳ" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "Hạn chế báo cáo kiểm kê với danh mục sản phẩm riêng biệt và danh mục con bất kỳ" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "Hạn chế báo cáo kiểm kê với vị trí kho riêng biệt và vị trí con bất kỳ" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "Ngoại trừ kho bên ngoài" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "Loại trừ hàng trong kho của vị trí bên ngoài" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "Tạo báo cáo" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "Tạo tệp báo cáo chứa dữ liệu kiểm kê đã tính toán" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "Cập nhật sản phẩm" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "Cập nhật sản phẩm cụ thể với dữ liệu kiểm kê đã tính" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "Chức năng kiểm kê chưa được bật" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, 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:1344 +#: part/serializers.py:1361 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:1347 +#: part/serializers.py:1364 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:1714 +#: part/serializers.py:1731 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:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1723 +#: part/serializers.py:1740 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:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1729 +#: part/serializers.py:1746 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:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1735 +#: part/serializers.py:1752 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:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "Dọn dẹp BOM đang tồn tại" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "Xóa mục BOM đang tồn tại trước khi tải lên" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "Chưa chỉ ra cột sản phẩm" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "Tìm thấy nhiều sản phẩm phù hợp" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "Không tìm thấy sản phẩm nào" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "Sản phẩm không được chỉ định như là một thành phần" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "Chưa cung cấp số lượng" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "Số lượng không hợp lệ" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "Buộc phải nhập ít nhất một mục BOM" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "Tổng số lượng" @@ -7281,7 +7159,7 @@ msgstr "Thêm thông tin kiểm kê" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "Kiểm kê" @@ -7379,15 +7257,15 @@ msgstr "Nhà cung cấp sản phẩm" msgid "Part Manufacturers" msgstr "Nhà sản xuất sản phẩm" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7324,7 @@ msgstr "Đăng ký nhận thông báo về sản phẩm này" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "In tem nhãn" @@ -7468,7 +7346,7 @@ msgstr "Đếm kho sản phẩm" msgid "Transfer part stock" msgstr "Chuyển kho sản phẩm" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "Chức năng sản phẩm" @@ -7517,7 +7395,7 @@ msgid "Part is virtual (not a physical part)" msgstr "Sản phẩm là ảo (không phải sản phẩm vật lý)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "Chi tiết giá sản phẩm" @@ -7540,7 +7418,7 @@ msgid "Minimum stock level" msgstr "Cấp kho tối thiểu" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7441,19 @@ msgstr "Mã QR sản phẩm" msgid "Link Barcode to Part" msgstr "Liên kết mã vạch đến sản phẩm" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "Tính toán" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "Xóa ảnh gắn kết với sản phẩm này" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "Không tìm thấy hình ảnh phù hợp" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "Ẩn chi tiết sản phẩm" @@ -7634,8 +7512,8 @@ msgstr "Biến thể" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "Kiện hàng" @@ -7681,7 +7559,7 @@ msgstr "Sửa" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "Cập nhật lần cuối" @@ -7753,7 +7631,7 @@ msgid "Update Pricing" msgstr "Cập nhập giá bán" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7711,7 @@ msgstr "Không tìm thấy ảnh sản phẩm" msgid "Part Pricing" msgstr "Định giá sản phẩm" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7777,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "Kho không đủ hạn mức khả dụng" @@ -7994,20 +7872,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "Số lượng cần phân bổ" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "In nhãn thất bại" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7899,7 @@ msgstr "Cung cấp hỗ trợ gốc cho mã vạch" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7953,19 @@ msgstr "Trao đổi tiền tệ InvenTree" msgid "Default currency exchange integration" msgstr "Tích hợp trao đổi tiền tệ mặc định" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "Máy in nhãn InvenTree PDF" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 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:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "Chế độ gỡ lỗi" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 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" @@ -8099,11 +7977,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +8005,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:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "Ngang" @@ -8143,11 +8021,11 @@ msgstr "Máy in tờ nhãn InvenTree" msgid "Arrays multiple labels onto a single sheet" msgstr "Sắp xếp nhiều nhãn trong một tờ đơn" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "Nhãn quá lớn so với khổ giấy" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "Chưa tạo nhãn nào" @@ -8240,61 +8118,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "Cấu hình phần bổ sung" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "Cấu hình phần bổ sung" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "Khóa" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "Khóa của phần bổ sung" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "Tên của phần bổ sung" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "Tên gói" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "Là phần bổ sung hoạt động" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "Đã cài đặt" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "Phần bổ sung mẫu" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "Plugin có sẵn" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "Phần bổ sung" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "Phương thức" @@ -8302,17 +8181,17 @@ msgstr "Phương thức" msgid "No author found" msgstr "Không tìm thấy tác giả" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Phần bổ sung '{p}' không tương thích với phiên bản InvenTree hiện tại {v}" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Phần bổ sung yêu cầu ít nhất phiên bản {v}" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Phần bổ sung yêu cầu tối đa phiên bản {v}" @@ -8395,279 +8274,363 @@ msgstr "Cài đặt chưa được xác nhận" msgid "Either packagename of URL must be provided" msgstr "Hoặc là phải cung cấp tên gói của URL" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "Tải lại đầy đủ" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "Buộc tải lại" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "Kích hoạt phần bổ sung" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "Kích hoạt phần bổ sung này" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "Chưa cung cấp đối tượng hợp lệ cho bản mẫu" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "Tệp mẫu '{template}' đang bị lỗi hoặc không tồn tại" -#: report/api.py:319 -msgid "Test report" -msgstr "Báo cáo kiểm tra" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "Pháp lý" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "Thư" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "Tên mẫu" -#: report/models.py:183 -msgid "Report template file" -msgstr "Tệp mẫu báo cáo" +#: report/models.py:156 +msgid "Template description" +msgstr "" -#: report/models.py:190 -msgid "Report template description" -msgstr "Mô tả tệp mẫu báo cáo" +#: report/models.py:162 +msgid "Revision number (auto-increments)" +msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "Số phiên bản báo cáo (tự động tăng)" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "Mẫu tên tệp" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "Bộ lọc" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "Khổ giấy cho báo cáo PDF" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "Tạo báo cáo theo hướng ngang" -#: report/models.py:318 -msgid "Pattern for generating report filenames" -msgstr "Quy tắc sinh tên tệp báo cáo" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "Chiều rộng [mm]" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "Mẫu báo cáo đang bật" +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "Chiều rộng nhãn, tính theo mm" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "Truy vấn bộ lọc hàng trong kho (dùng dấu phẩy liệt kê các cặp key=value)" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "Chiều cao [mm]" -#: report/models.py:354 -msgid "Include Installed Tests" -msgstr "Bao gồm các đợt kiểm tra đã lắp đặt" +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "Chiều cao nhãn, tính theo mm" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" -msgstr "Bao gồm kết quả kiểm tra cho hàng trong kho được cài đặt bên trong hàng hóa đã lắp ráp" - -#: report/models.py:424 -msgid "Build Filters" -msgstr "Dựng bộ lọc" - -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "Dựng bộ lọc truy vấn (dùng dấu phẩy liệt kê các cặp key=value" - -#: report/models.py:464 -msgid "Part Filters" -msgstr "Bộ lọc sản phẩm" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "Bộ lọc truy vấn sản phẩm (dùng dấu phẩy liệt kê các cặp key=value" - -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "Bộ lọc truy vấn đơn đặt mua" - -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "Bộ lọc truy vấn đơn hàng bán" - -#: report/models.py:569 -msgid "Return order query filters" -msgstr "Bộ lọc truy vấn đơn hàng trả lại" - -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:648 +#: report/models.py:444 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "" + +#: report/models.py:448 +msgid "Report generation progress" +msgstr "" + +#: report/models.py:456 +msgid "Report Template" +msgstr "" + +#: report/models.py:463 report/models.py:486 +msgid "Output File" +msgstr "" + +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" +msgstr "" + +#: report/models.py:475 +msgid "Label output plugin" +msgstr "" + +#: report/models.py:479 +msgid "Label Template" +msgstr "" + +#: report/models.py:502 msgid "Snippet" msgstr "Mẫu trích" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "Tệp báo cáo mẫu" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "Mô tả tệp báo cáo mẫu" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "Tài sản" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "Tệp báo cáo tài sản" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "Mô tả tệp báo cáo tài sản" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" -msgstr "bộ lọc truy vấn vị trí kho (dùng dấu phẩy liệt kê các cặp key=value)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "Mã QR" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "Mã QR" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "Vật liệu cần có" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "Bắt buộc cho" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "Nhà cung cấp đã bị xóa" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "Đơn giá" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "Bảng liệt kê mở rộng" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "Tổng cộng" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "Số sê-ri" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "Mục vị trí kho hàng" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "Báo cáo kiểm thử mặt hàng" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "Kết quả kiểm tra" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "Thử nghiệm" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "Kết quả" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "Đạt" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "Không đạt" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "Không có kết quả (bắt buộc)" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "Không có kết quả" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "Mục đã cài đặt" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "Sê-ri" @@ -8724,7 +8687,7 @@ msgstr "Tên nhà cung cấp" msgid "Customer ID" msgstr "ID Khách hàng" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "Đã cài đặt trong" @@ -8749,555 +8712,723 @@ msgstr "Cần xem xét" msgid "Delete on Deplete" msgstr "Xóa khi thiếu hụt" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "Địa điểm bên ngoài" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "Cây sản phẩm" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "Ngày hết hạn trước đó" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "Ế" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "Bắt buộc nhập số lượng" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "Phải cung cấp sản phẩm hợp lệ" -#: stock/api.py:928 +#: stock/api.py:964 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:938 +#: stock/api.py:974 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:969 +#: stock/api.py:1005 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/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "Loại vị trí kho hàng" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "Loại vị trí kho hàng" -#: stock/models.py:90 +#: stock/models.py:86 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:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "Vị trí kho hàng" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "Chủ sở hữu" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "Chọn chủ sở hữu" -#: stock/models.py:167 +#: stock/models.py:175 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:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "Bên ngoài" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "Đây là vị trí kho bên ngoài" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "Loại vị trí" -#: stock/models.py:185 +#: stock/models.py:193 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:254 +#: stock/models.py:262 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:626 +#: stock/models.py:643 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:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 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:670 +#: stock/models.py:687 #, 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:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 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:683 +#: stock/models.py:700 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:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "Hàng hóa không thể thuộc về chính nó" -#: stock/models.py:712 +#: stock/models.py:729 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:725 +#: stock/models.py:742 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:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "Hàng trong kho cha" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "Sản phẩm cơ bản" -#: stock/models.py:763 +#: stock/models.py:780 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:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 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:794 +#: stock/models.py:811 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:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "Số lượng tồn kho" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "Bản dựng nguồn" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "Bản dựng cho hàng hóa này" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "Tiêu thụ bởi" -#: stock/models.py:855 +#: stock/models.py:872 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:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "Đơn đặt mua nguồn" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "Đơn đặt mua cho hàng hóa này" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "Đơn hàng bán đích" -#: stock/models.py:885 +#: stock/models.py:902 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:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "Xóa khi thiếu hụt" -#: stock/models.py:904 +#: stock/models.py:921 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:924 +#: stock/models.py:941 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:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "Đã chuyển đổi sang sản phẩm" -#: stock/models.py:1465 +#: stock/models.py:1490 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:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "Số lượng phải là số nguyên" -#: stock/models.py:1479 +#: stock/models.py:1504 #, 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:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "Số sêri phải là một danh sách dãy số nguyên" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "Số lượng không khớp với số sêri" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "Số sêri đã tồn tại" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 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:1617 +#: stock/models.py:1642 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:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "Hàng trong kho chứa hàng hóa khác" -#: stock/models.py:1623 +#: stock/models.py:1648 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:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "Hàng trong kho hiện đang sản xuất" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" -#: stock/models.py:1640 +#: stock/models.py:1665 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:1648 +#: stock/models.py:1673 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:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "Mã trạng thái kho phải phù hợp" -#: stock/models.py:1870 +#: stock/models.py:1905 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:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "Ghi chú đầu vào" -#: stock/models.py:2398 +#: stock/models.py:2391 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:2403 +#: stock/models.py:2396 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:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "Kết quả kiểm thử" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "Giá trị đầu ra kiểm thử" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "Đính kèm kết quả kiểm thử" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "Ghi chú kiểm thử" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "Số sêri quá lớn" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Sử dụng kích thước đóng gói khi thêm: Số lượng được định nghĩa là số của gói" -#: stock/serializers.py:402 +#: stock/serializers.py:531 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:464 +#: stock/serializers.py:593 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:477 +#: stock/serializers.py:606 #, 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:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "Vị trí kho đích" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: stock/serializers.py:512 +#: stock/serializers.py:641 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:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "Chọn mặt hàng để lắp đặt" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "Số lượng để cài đặt" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "Nhập số lượng hàng hóa để cài đặt" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "Thêm ghi chú giao dịch (tùy chọn)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 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:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "Mặt hàng không khả dụng" -#: stock/serializers.py:607 +#: stock/serializers.py:736 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:620 +#: stock/serializers.py:749 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:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ" -#: stock/serializers.py:690 +#: stock/serializers.py:819 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:703 +#: stock/serializers.py:832 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:720 +#: stock/serializers.py:849 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:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "Vị trí đích dành cho hàng hóa trả lại" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "Chọn mặt hàng để đổi trạng thái" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 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:1077 +#: stock/serializers.py:1206 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:1101 +#: stock/serializers.py:1230 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:1107 +#: stock/serializers.py:1236 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:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 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:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 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:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "Cho phép trạng thái không khớp" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 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:1226 +#: stock/serializers.py:1355 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:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "Giá trị khóa chính mặt hàng" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "Mã trạng thái mặt hàng" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "Ghi chú giao dịch kho" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "Đồng ý" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "Chú ý cần thiết" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "Bị hư hại" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "Đã hủy" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "Đã từ chối" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "Đã cách ly" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "Mục theo dõi kho cổ điển" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "Kho hàng đã được khởi tạo" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "Sửa kho hàng" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "Số sê ri đã được gán" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "Kho đã đếm" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "Kho được thêm thủ công" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "Kho được xóa thủ công" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "Vị trí đã thay đổi" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "Kho hàng đã được cập nhật" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "Đã cài đặt vào bộ phận lắp ráp" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "Di rời khỏi bộ phận lắp ráp" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "Mục thành phần đã cài đặt" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "Mục thành phần đã di rời" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "Tách từ mục cha" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "Tách mục con" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "Kho hàng đã được gộp" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "Đã chuyển đổi sang biến thể" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "Đầu ra đơn đặt bản dựng đã được tạo" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "Đầu ra đơn đặt bản dựng đã hoàn thành" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "Đầu ra đơn đặt bản dựng bị từ chối" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "Tiêu hao bởi đơn đặt bản dựng" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "Vận chyển dựa vào đơn đặt bản dựng" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "Đã nhận dựa vào đơn đặt hàng mua" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "Trả hành dựa vào đơn hàng trả lại" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "Gửi đến khách hàng" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "Bị trả lại từ khách hàng" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "Thông tin theo dõi kho" @@ -9319,7 +9450,7 @@ msgstr "Thông tin kiểm thử" msgid "Test Report" msgstr "Báo cáo kiểm thử" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "Xóa dữ liệu báo cáo kiểm thử" @@ -9339,11 +9470,11 @@ msgstr "Hàng hóa đã lắp đặt" msgid "Install Stock Item" msgstr "Lắp đặt hàng hóa trong kho" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "Xóa toàn bộ kết quả kiểm thử cho kho hàng này" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9497,17 @@ msgid "Stock adjustment actions" msgstr "Chức năng điều chỉnh kho" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "Đếm hàng" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "Thêm hàng" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "Xóa hàng hóa" @@ -9385,12 +9516,12 @@ msgid "Serialize stock" msgstr "Sắp xếp hàng hóa" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "Chuyển giao hàng" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "Chỉ định cho khách hàng" @@ -9431,7 +9562,7 @@ msgid "Delete stock item" msgstr "Xóa mặt hàng" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "Dựng" @@ -9497,7 +9628,7 @@ msgid "Available Quantity" msgstr "Số lượng sẵn có" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "Không có vị trí nào được đặt" @@ -9528,40 +9659,40 @@ msgstr "Mặt hàng này hết hạn vào %(item.expiry_date)s" msgid "No stocktake performed" msgstr "Chưa thực hiện kiểm kê" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "Chọn một trong những biến thể sản phẩm được liệt kê bên dưới." -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "Cánh báo" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "Thao tác này không thể khôi phục lại một cách dễ dàng" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9756,32 @@ msgstr "Chủ sở hữu vị trí" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "Bạn không thuộc danh sách chủ sở hữu của vị trí này. Vị trí kho này không thể sửa được." -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "Tạo mới vị trí kho" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "Vị trí mới" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10007,12 @@ msgstr "Cài đặt đăng nhập" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "Chưa cấu hình email gửi đi. Một số tính năng đăng nhập và đăng ký sẽ không hoạt động được!" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "Đăng ký" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "Đăng nhập một lần" @@ -9916,11 +10051,11 @@ msgstr "" msgid "Part Settings" msgstr "Cài đặt sản phẩm" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "Nhập hàng hóa" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "Nhập sản phẩm" @@ -9954,36 +10089,36 @@ msgstr "Thiết lập phần bổ sung" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "Đổi thiết lập bên dưới yêu cầu bạn cần khởi động máy chủ ngay lập tức. Đừng thay đổi điều này trong khi đang sử dụng phần mềm." -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "Phần bổ sung" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "Cài đặt phần bổ sung" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "Tải lại plugin" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "Phần bổ sung bên ngoài chưa được bật cho cài đặt InvenTree này" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "Ngăn Xếp Lỗi Phần Bổ Sung" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "Giai đoạn" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "Tin nhắn" @@ -10141,7 +10276,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "Xóa" @@ -10162,7 +10297,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10363,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "Loại vị trí mới" @@ -10250,7 +10385,7 @@ msgid "Home Page" msgstr "Trang chủ" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10420,7 @@ msgstr "Thiết lập đơn hàng bán" msgid "Stock Settings" msgstr "Cài đặt kho hàng" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "Loại ví trí kho" @@ -10384,49 +10519,49 @@ msgstr "Cài đặt đa nhân tố" msgid "Remove multifactor" msgstr "Xóa đa nhân tố" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "Các phiên hoạt động" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "Đăng xuất phiên đang hoạt động (trừ phiên này)" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "Đăng xuất phiên đang hoạt động" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "không rõ trên không rõ" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "không rõ" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "Địa chỉ IP" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "Thiết bị" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "Hoạt động gần đây" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "%(time)s trước (phiên này)" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "%(time)s trước" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10742,26 @@ msgstr "Xác nhận" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "Liên kết xác nhận email đã hết hạn hoặc không hợp lệ. Xin hãy tạo yêu cầu xác nhận email mới." -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "Đăng nhập" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "Chưa có tài khoản?" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "Đăng ký" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "Quân mật khẩu?" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "hoặc đăng nhập bằng" @@ -10827,7 +10962,7 @@ msgid "The following parts are low on required stock" msgstr "Sản phẩm sau còn ít hàng trong kho yêu cầu" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "Số lượng bắt buộc" @@ -10841,7 +10976,7 @@ msgid "Click on the following link to view this part" msgstr "Nhấp chuột vào liên kết dưới đây để xem sản phẩm này" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "Số lượng tối thiểu" @@ -11006,7 +11141,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11331,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11351,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11406,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11575,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12021,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12058,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12091,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "Lỗi biểu mẫu tồn tại" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12140,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12266,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12504,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12528,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12544,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12764,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12777,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12834,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12888,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12908,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12999,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13061,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13418,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "Thêm" @@ -13327,180 +13426,180 @@ msgstr "Thêm" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14072,22 @@ msgstr "Lưu lại" msgid "Show all notifications and history" msgstr "Hiện toàn bộ thông báo và lịch sử" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "Chưa cung cấp dữ liệu QR" @@ -14194,35 +14309,34 @@ msgstr "Lần cuối mã thông báo được sử dụng" msgid "Revoked" msgstr "Đã thu hồi" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "Quyền hạn đã đặt" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "Nhóm" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "Xem" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "Quyền để xem mục" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "Quyền để thêm mục" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "Đổi" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "Quyển để sửa mục" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "Quyền để xóa mục" - diff --git a/src/backend/InvenTree/locale/zh/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh/LC_MESSAGES/django.po index a421e6d44b..8f153ad6c2 100644 --- a/src/backend/InvenTree/locale/zh/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-20 13:19+0000\n" -"PO-Revision-Date: 2024-04-21 04:19\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" +"PO-Revision-Date: 2024-05-27 11:54\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 216\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -56,26 +56,26 @@ msgstr "" msgid "Enter date" msgstr "" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "" @@ -132,7 +132,7 @@ msgstr "" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "" @@ -324,14 +324,18 @@ msgid "Turkish" msgstr "" #: InvenTree/locales.py:48 -msgid "Vietnamese" +msgid "Ukrainian" msgstr "" #: InvenTree/locales.py:49 -msgid "Chinese (Simplified)" +msgid "Vietnamese" msgstr "" #: InvenTree/locales.py:50 +msgid "Chinese (Simplified)" +msgstr "" + +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -351,145 +355,145 @@ msgstr "" msgid "Error running plugin validation" msgstr "" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -499,98 +503,98 @@ msgstr "" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -682,7 +686,7 @@ msgstr "" msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "" @@ -694,202 +698,6 @@ msgstr "" msgid "InvenTree system health checks failed" msgstr "" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "" - -#: InvenTree/status_codes.py:106 -msgid "Stock updated" -msgstr "" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "" - -#: InvenTree/status_codes.py:128 -msgid "Build order output rejected" -msgstr "" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "" - -#: InvenTree/status_codes.py:132 -msgid "Shipped against Sales Order" -msgstr "" - -#: InvenTree/status_codes.py:135 -msgid "Received against Purchase Order" -msgstr "" - -#: InvenTree/status_codes.py:138 -msgid "Returned against Return Order" -msgstr "" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "" - -#: InvenTree/status_codes.py:185 -msgid "Return" -msgstr "" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -msgid "Replace" -msgstr "" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -msgid "Reject" -msgstr "" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -938,45 +746,45 @@ msgstr "" msgid "About InvenTree" msgstr "" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -984,16 +792,16 @@ msgstr "" msgid "Available" msgstr "" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1004,708 +812,751 @@ msgstr "" msgid "Build Orders" msgstr "" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "" -#: build/models.py:191 +#: build/models.py:221 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 msgid "Project Code" msgstr "" -#: build/models.py:330 +#: build/models.py:360 msgid "Project code for this build order" msgstr "" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +msgid "Build Order Line Item" +msgstr "" + +#: build/models.py:1377 msgid "Build object" msgstr "" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "" -#: build/models.py:1323 +#: build/models.py:1392 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1493 +#: build/models.py:1562 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "" -#: build/serializers.py:427 +#: build/serializers.py:301 +msgid "Stock location for build output" +msgstr "" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "" + +#: build/serializers.py:331 +msgid "Serial numbers must be provided for trackable parts" +msgstr "" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "" + +#: build/serializers.py:442 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:433 +#: build/serializers.py:448 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:734 +#: build/serializers.py:770 msgid "Build Line" msgstr "" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:824 msgid "Build Line Item" msgstr "" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" @@ -1822,18 +1673,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "" @@ -1846,7 +1697,7 @@ msgstr "" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1860,42 +1711,42 @@ msgid "Completed Outputs" msgstr "" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 msgid "Build Order QR Code" msgstr "" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 msgid "Link Barcode to Build Order" msgstr "" @@ -1911,8 +1762,8 @@ msgstr "" msgid "Stock can be taken from any available location." msgstr "" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "" @@ -1926,10 +1777,10 @@ msgstr "" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -1939,8 +1790,8 @@ msgstr "" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "" @@ -1949,7 +1800,7 @@ msgid "No target date set" msgstr "" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "" @@ -2043,11 +1894,11 @@ msgstr "" msgid "Build Notes" msgstr "" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 msgid "All lines have been fully allocated" msgstr "" @@ -2125,1458 +1976,1483 @@ msgstr "" msgid "User or group responsible for this project" msgstr "" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "" -#: common/models.py:1171 +#: common/models.py:1172 msgid "No plugin" msgstr "" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/models.py:1268 +#: common/models.py:1269 msgid "Pending migrations" msgstr "" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 msgid "Part Revisions" msgstr "" -#: common/models.py:1435 +#: common/models.py:1436 msgid "Enable revision field for Part" msgstr "" -#: common/models.py:1440 +#: common/models.py:1441 +msgid "Allow Deletion from Assembly" +msgstr "" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 msgid "Enforce Parameter Units" msgstr "" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/models.py:1680 +#: common/models.py:1687 msgid "Log Report Errors" msgstr "" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 msgid "Show Installed Stock Items" msgstr "" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 msgid "Require Responsible Owner" msgstr "" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 msgid "Enable Return Orders" msgstr "" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 msgid "Return Order Reference Pattern" msgstr "" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 msgid "Edit Completed Return Orders" msgstr "" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +msgid "Mark Shipped Orders as Complete" +msgstr "" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 msgid "Enable project codes" msgstr "" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 msgid "Exclude External Locations" msgstr "" -#: common/models.py:2034 +#: common/models.py:2057 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 msgid "Enable test station data collection for test results" msgstr "" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 msgid "Hide inactive parts" msgstr "" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 msgid "Show pending SO shipments on the homepage" msgstr "" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 msgid "Search Return Orders" msgstr "" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 msgid "Regex Search" msgstr "" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 msgid "Default part label template" msgstr "" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 msgid "Default stock item template" msgstr "" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 msgid "Default stock location label template" msgstr "" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 msgid "Default build line label template" msgstr "" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3586,135 +3462,135 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "" -#: common/models.py:3044 +#: common/models.py:3067 msgid "Image file" msgstr "" -#: common/models.py:3086 +#: common/models.py:3109 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:3105 +#: common/models.py:3128 msgid "Unit name" msgstr "" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 msgid "Optional unit symbol" msgstr "" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 msgid "Definition" msgstr "" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3736,7 +3612,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3752,63 +3628,63 @@ msgstr "" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock time" msgstr "" -#: common/serializers.py:370 +#: common/serializers.py:403 msgid "Task name" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function" msgstr "" -#: common/serializers.py:372 +#: common/serializers.py:405 msgid "Function name" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Arguments" msgstr "" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -3901,9 +3777,9 @@ msgid "Contact email address" msgstr "" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "" @@ -3949,7 +3825,7 @@ msgstr "" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "" @@ -4041,19 +3917,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4068,13 +3944,13 @@ msgid "Select manufacturer" msgstr "" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4086,61 +3962,60 @@ msgstr "" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4148,97 +4023,97 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4257,7 +4132,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4293,11 +4168,11 @@ msgstr "" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 msgid "Part image" msgstr "" @@ -4316,15 +4191,15 @@ msgstr "" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4334,10 +4209,10 @@ msgstr "" msgid "Uses default currency" msgstr "" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "" @@ -4346,7 +4221,7 @@ msgid "Phone" msgstr "" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4355,19 +4230,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "" @@ -4520,7 +4395,7 @@ msgid "Delete manufacturer part" msgstr "" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "" @@ -4530,7 +4405,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4580,11 +4455,11 @@ msgid "Addresses" msgstr "" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "" @@ -4630,11 +4505,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4643,12 +4518,12 @@ msgid "Supplier Part Stock" msgstr "" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4680,13 +4555,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4723,126 +4598,52 @@ msgstr "" msgid "New Company" msgstr "" -#: label/api.py:247 -msgid "Error printing label" -msgstr "" - -#: label/models.py:120 -msgid "Label name" -msgstr "" - -#: label/models.py:128 -msgid "Label description" -msgstr "" - -#: label/models.py:136 -msgid "Label" -msgstr "" - -#: label/models.py:137 -msgid "Label template file" -msgstr "" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -msgid "QR Code" -msgstr "" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 -msgid "Copies" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" msgstr "" #: machine/machine_types/label_printer.py:218 +msgid "Copies" +msgstr "" + +#: machine/machine_types/label_printer.py:219 msgid "Number of copies to print for each label" msgstr "" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 msgid "Printing" msgstr "" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 msgid "Disconnected" msgstr "" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 msgid "Label Printer" msgstr "" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." msgstr "" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 msgid "Printer Location" msgstr "" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -4903,63 +4704,64 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 msgid "Order Complete" msgstr "" -#: order/api.py:458 +#: order/api.py:462 msgid "Order Pending" msgstr "" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 msgid "Return Order" msgstr "" @@ -4976,517 +4778,573 @@ msgstr "" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:278 +#: order/models.py:290 msgid "Order description (optional)" msgstr "" -#: order/models.py:287 +#: order/models.py:299 msgid "Select project code for this order" msgstr "" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "" -#: order/models.py:332 +#: order/models.py:344 msgid "Point of contact for this order" msgstr "" -#: order/models.py:342 +#: order/models.py:354 msgid "Company address for this order" msgstr "" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" +#: order/models.py:1027 +msgid "Order is already complete" msgstr "" -#: order/models.py:1004 +#: order/models.py:1030 +msgid "Order is already cancelled" +msgstr "" + +#: order/models.py:1034 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 msgid "Return Order reference" msgstr "" -#: order/models.py:2009 +#: order/models.py:2069 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 msgid "Select item to return from customer" msgstr "" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +msgid "Completed Lines" +msgstr "" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 msgid "Merge Items" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "" -#: order/serializers.py:598 +#: order/serializers.py:602 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:1655 +#: order/serializers.py:1659 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 msgid "Line price currency" msgstr "" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +msgid "Return" +msgstr "" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +msgid "Replace" +msgstr "" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +msgid "Reject" +msgstr "" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5553,7 +5411,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5563,13 +5421,13 @@ msgstr "" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5578,19 +5436,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5600,15 +5458,15 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 msgid "Purchase Order QR Code" msgstr "" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 msgid "Link Barcode to Purchase Order" msgstr "" @@ -5662,11 +5520,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -5708,15 +5566,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -5729,7 +5578,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -5778,30 +5627,30 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 msgid "Return Order QR Code" msgstr "" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 msgid "Link Barcode to Return Order" msgstr "" @@ -5819,25 +5668,30 @@ msgid "Ship Items" msgstr "" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +msgid "Mark As Shipped" +msgstr "" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 msgid "Sales Order QR Code" msgstr "" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 msgid "Link Barcode to Sales Order" msgstr "" @@ -5881,12 +5735,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -5895,20 +5749,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "" @@ -5917,15 +5771,15 @@ msgstr "" msgid "Part Image" msgstr "" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -5933,11 +5787,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "" @@ -5950,160 +5804,164 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 msgid "Parent" msgstr "" -#: part/api.py:180 +#: part/api.py:171 msgid "Filter by parent category" msgstr "" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:461 +#: part/api.py:455 msgid "Has Results" msgstr "" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6112,698 +5970,712 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +msgid "Cannot delete this part as it is still active" +msgstr "" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 msgid "Part description (optional)" msgstr "" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "" -#: part/models.py:1097 +#: part/models.py:1140 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 msgid "Choices must be unique" msgstr "" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 msgid "Invalid choice for parameter value" msgstr "" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -6821,7 +6693,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -6837,299 +6709,299 @@ msgstr "" msgid "Select category" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 msgid "Copy Notes" msgstr "" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 msgid "External Stock" msgstr "" -#: part/serializers.py:825 +#: part/serializers.py:840 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:843 msgid "Variant Stock" msgstr "" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 msgid "Existing Image" msgstr "" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 msgid "Exclude stock items in external locations" msgstr "" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7281,7 +7153,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7379,15 +7251,15 @@ msgstr "" msgid "Part Manufacturers" msgstr "" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7446,7 +7318,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "" @@ -7468,7 +7340,7 @@ msgstr "" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7517,7 +7389,7 @@ msgid "Part is virtual (not a physical part)" msgstr "" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7540,7 +7412,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7563,19 +7435,19 @@ msgstr "" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7634,8 +7506,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "" @@ -7681,7 +7553,7 @@ msgstr "" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -7753,7 +7625,7 @@ msgid "Update Pricing" msgstr "" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -7833,7 +7705,7 @@ msgstr "" msgid "Part Pricing" msgstr "" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -7899,8 +7771,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -7994,20 +7866,20 @@ msgstr "" msgid "Quantity to allocate" msgstr "" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:111 -msgid "Error rendering label to PNG" +#: plugin/base/label/mixins.py:151 +msgid "No items provided to print" msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:25 @@ -8021,7 +7893,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8075,19 +7947,19 @@ msgstr "" msgid "Default currency exchange integration" msgstr "" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8099,11 +7971,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "" @@ -8127,7 +7999,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8143,11 +8015,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8240,61 +8112,62 @@ msgstr "" msgid "Uninstalled plugin successfully" msgstr "" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 msgid "Package Plugin" msgstr "" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8302,17 +8175,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8395,279 +8268,363 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 msgid "Collect plugins" msgstr "" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 msgid "Delete configuration" msgstr "" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +msgid "Plugin not found" +msgstr "" + +#: report/api.py:170 +msgid "Plugin is not active" +msgstr "" + +#: report/api.py:172 +msgid "Plugin does not support label printing" +msgstr "" + +#: report/api.py:221 +msgid "Invalid label dimensions" +msgstr "" + +#: report/api.py:236 report/api.py:316 +msgid "No valid items provided to template" +msgstr "" + +#: report/api.py:271 +msgid "Error printing label" +msgstr "" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +msgid "Template file with this name already exists" +msgstr "" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +msgid "Template description" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" +#: report/models.py:202 +msgid "Filename Pattern" msgstr "" -#: report/models.py:204 +#: report/models.py:203 +msgid "Pattern for generating filenames" +msgstr "" + +#: report/models.py:208 +msgid "Template is enabled" +msgstr "" + +#: report/models.py:214 +msgid "Target model type for template" +msgstr "" + +#: report/models.py:234 +msgid "Filters" +msgstr "" + +#: report/models.py:235 +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "" + +#: report/models.py:294 report/models.py:361 +msgid "Template file" +msgstr "" + +#: report/models.py:302 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" +#: report/models.py:367 +msgid "Width [mm]" msgstr "" -#: report/models.py:325 -msgid "Report template is enabled" +#: report/models.py:368 +msgid "Label width, specified in mm" msgstr "" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" +#: report/models.py:374 +msgid "Height [mm]" msgstr "" -#: report/models.py:354 -msgid "Include Installed Tests" +#: report/models.py:375 +msgid "Label height, specified in mm" msgstr "" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" +#: report/models.py:438 +msgid "Number of items to process" msgstr "" -#: report/models.py:424 -msgid "Build Filters" +#: report/models.py:444 +msgid "Report generation is complete" msgstr "" -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" msgstr "" -#: report/models.py:464 -msgid "Part Filters" +#: report/models.py:448 +msgid "Report generation progress" msgstr "" -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" +#: report/models.py:456 +msgid "Report Template" msgstr "" -#: report/models.py:497 -msgid "Purchase order query filters" +#: report/models.py:463 report/models.py:486 +msgid "Output File" msgstr "" -#: report/models.py:533 -msgid "Sales order query filters" +#: report/models.py:464 report/models.py:487 +msgid "Generated output file" msgstr "" -#: report/models.py:569 -msgid "Return order query filters" +#: report/models.py:475 +msgid "Label output plugin" msgstr "" -#: report/models.py:641 -msgid "Snippet file with this name already exists" +#: report/models.py:479 +msgid "Label Template" msgstr "" -#: report/models.py:648 +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -msgid "Asset file with this name already exists" -msgstr "" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 -msgid "stock location query filters (comma-separated list of key=value pairs)" +#: report/serializers.py:91 +msgid "Select report template" +msgstr "" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +msgid "Select label template" +msgstr "" + +#: report/serializers.py:140 +msgid "Printing Plugin" +msgstr "" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +msgid "QR Code" +msgstr "" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" msgstr "" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 msgid "No result (required)" msgstr "" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -8724,7 +8681,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -8749,555 +8706,723 @@ msgstr "" msgid "Delete on Deplete" msgstr "" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 msgid "Filter by location depth" msgstr "" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 msgid "Parent Location" msgstr "" -#: stock/api.py:326 +#: stock/api.py:360 msgid "Filter by parent location" msgstr "" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 msgid "Part Tree" msgstr "" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 msgid "Stock Location type" msgstr "" -#: stock/models.py:64 +#: stock/models.py:60 msgid "Stock Location types" msgstr "" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 msgid "Location type" msgstr "" -#: stock/models.py:185 +#: stock/models.py:193 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 msgid "Consumed By" msgstr "" -#: stock/models.py:855 +#: stock/models.py:872 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "" -#: stock/models.py:1595 +#: stock/models.py:1620 msgid "Test template does not exist" msgstr "" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 msgid "Test station" msgstr "" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:2471 +#: stock/models.py:2464 msgid "Finished" msgstr "" -#: stock/models.py:2472 +#: stock/models.py:2465 msgid "The timestamp of the test finish" msgstr "" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +msgid "Select build order" +msgstr "" + +#: stock/serializers.py:93 +msgid "Select stock item to generate batch code for" +msgstr "" + +#: stock/serializers.py:102 +msgid "Select location to generate batch code for" +msgstr "" + +#: stock/serializers.py:111 +msgid "Select part to generate batch code for" +msgstr "" + +#: stock/serializers.py:120 +msgid "Select purchase order" +msgstr "" + +#: stock/serializers.py:127 +msgid "Enter quantity for batch code" +msgstr "" + +#: stock/serializers.py:150 +msgid "Generated serial number" +msgstr "" + +#: stock/serializers.py:159 +msgid "Select part to generate serial number for" +msgstr "" + +#: stock/serializers.py:167 +msgid "Quantity of serial numbers to generate" +msgstr "" + +#: stock/serializers.py:229 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:119 +#: stock/serializers.py:248 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:588 +#: stock/serializers.py:717 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:794 +#: stock/serializers.py:923 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 msgid "No Change" msgstr "" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "" + +#: stock/status_codes.py:55 +msgid "Stock updated" +msgstr "" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "" + +#: stock/status_codes.py:77 +msgid "Build order output rejected" +msgstr "" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "" + +#: stock/status_codes.py:81 +msgid "Shipped against Sales Order" +msgstr "" + +#: stock/status_codes.py:84 +msgid "Received against Purchase Order" +msgstr "" + +#: stock/status_codes.py:87 +msgid "Returned against Return Order" +msgstr "" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9319,7 +9444,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9339,11 +9464,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9366,17 +9491,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9385,12 +9510,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9431,7 +9556,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "" @@ -9497,7 +9622,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "" @@ -9528,40 +9653,40 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 msgid "stock item" msgstr "" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -9625,28 +9750,32 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +msgid "Location Type" +msgstr "" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 msgid "stock location" msgstr "" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -9872,12 +10001,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -9916,11 +10045,11 @@ msgstr "" msgid "Part Settings" msgstr "" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "" @@ -9954,36 +10083,36 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 msgid "Reload Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10141,7 +10270,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "" @@ -10162,7 +10291,7 @@ msgid "No project codes found" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10228,7 +10357,7 @@ msgid "Delete Location Type" msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 msgid "New Location Type" msgstr "" @@ -10250,7 +10379,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10285,7 +10414,7 @@ msgstr "" msgid "Stock Settings" msgstr "" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 msgid "Stock Location Types" msgstr "" @@ -10384,49 +10513,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -10607,26 +10736,26 @@ msgstr "" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -10827,7 +10956,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -10841,7 +10970,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11006,7 +11135,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11196,7 +11325,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11216,30 +11345,30 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 msgid "External stock" msgstr "" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11271,7 +11400,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -11440,207 +11569,207 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 msgid "Allocated Quantity" msgstr "" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 msgid "Scrap outputs" msgstr "" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 msgid "build output" msgstr "" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 msgid "build outputs" msgstr "" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 msgid "Build output actions" msgstr "" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 msgid "Allocated Lines" msgstr "" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 msgid "build line" msgstr "" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 msgid "build lines" msgstr "" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 msgid "No build lines found" msgstr "" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 msgid "Unit Quantity" msgstr "" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 msgid "Consumable Item" msgstr "" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 msgid "Tracked item" msgstr "" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 msgid "Remove stock allocation" msgstr "" @@ -11886,12 +12015,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -11923,7 +12052,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -11956,32 +12085,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12005,51 +12134,15 @@ msgstr "" msgid "No parts required for builds" msgstr "" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 msgid "Select Items" msgstr "" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 msgid "No items selected for printing" msgstr "" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "" - -#: templates/js/translated/label.js:73 -msgid "No label templates found which match the selected items" -msgstr "" - -#: templates/js/translated/label.js:97 -msgid "selected" -msgstr "" - -#: templates/js/translated/label.js:133 -msgid "Printing Options" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print label" -msgstr "" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "" - -#: templates/js/translated/label.js:149 -msgid "Print" -msgstr "" - -#: templates/js/translated/label.js:155 -msgid "Select label template" -msgstr "" - -#: templates/js/translated/label.js:168 -msgid "Select plugin" -msgstr "" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12167,7 +12260,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -12405,19 +12498,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -12429,7 +12522,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -12445,101 +12538,101 @@ msgstr "" msgid "Set category" msgstr "" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 msgid "part" msgstr "" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 msgid "parts" msgstr "" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 msgid "No subcategories found" msgstr "" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -12665,7 +12758,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -12678,7 +12771,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -12736,12 +12828,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -12790,7 +12882,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -12810,81 +12902,66 @@ msgstr "" msgid "Invalid barcode data" msgstr "" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 msgid "All selected Line items will be deleted" msgstr "" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 msgid "Delete selected Line items?" msgstr "" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" +#: templates/js/translated/report.js:49 +msgid "Print Report" msgstr "" -#: templates/js/translated/report.js:71 -msgid "Select Report Template" +#: templates/js/translated/report.js:68 +msgid "Report print successful" msgstr "" -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "" - -#: templates/js/translated/report.js:141 -msgid "No report templates found which match the selected items" +#: templates/js/translated/report.js:73 +msgid "Report printing failed" msgstr "" #: templates/js/translated/return_order.js:60 @@ -12916,25 +12993,25 @@ msgstr "" msgid "Complete Return Order" msgstr "" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 msgid "No return orders found" msgstr "" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -12978,140 +13055,156 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +msgid "Ship Sales Order" +msgstr "" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 msgid "Issue this Sales Order?" msgstr "" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 msgid "Issue Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -13319,7 +13412,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "" @@ -13327,180 +13420,180 @@ msgstr "" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 msgid "stock items" msgstr "" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 msgid "Scan to location" msgstr "" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 msgid "Stock Actions" msgstr "" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 msgid "Load installed items" msgstr "" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 msgid "Stock item has been consumed by a build order" msgstr "" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 msgid "Stock Value" msgstr "" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -13973,6 +14066,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -14194,35 +14303,34 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "" - diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index c2b95c519c..618a19ae01 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-20 13:19+0000\n" +"POT-Creation-Date: 2024-05-31 07:08+0000\n" "PO-Revision-Date: 2023-02-28 22:38\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" @@ -17,11 +17,11 @@ msgstr "" "X-Crowdin-File: /[inventree.InvenTree] l10/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 154\n" -#: InvenTree/api.py:255 +#: InvenTree/api.py:272 msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/api.py:519 +#: InvenTree/api.py:536 msgid "User does not have permission to view this model" msgstr "" @@ -62,26 +62,26 @@ msgstr "在管理面板中可以找到错误详细信息" msgid "Enter date" msgstr "输入日期" -#: InvenTree/fields.py:208 InvenTree/models.py:1021 build/serializers.py:438 -#: build/serializers.py:516 build/templates/build/sidebar.html:21 -#: company/models.py:847 company/templates/company/sidebar.html:37 -#: order/models.py:1283 order/templates/order/po_sidebar.html:11 +#: InvenTree/fields.py:208 InvenTree/models.py:1035 build/serializers.py:453 +#: build/serializers.py:531 build/templates/build/sidebar.html:21 +#: company/models.py:849 company/templates/company/sidebar.html:37 +#: order/models.py:1332 order/templates/order/po_sidebar.html:11 #: order/templates/order/return_order_sidebar.html:9 #: order/templates/order/so_sidebar.html:17 part/admin.py:59 -#: part/models.py:3175 part/templates/part/part_sidebar.html:63 -#: report/templates/report/inventree_build_order_base.html:172 -#: stock/admin.py:226 stock/models.py:2332 stock/models.py:2449 -#: stock/serializers.py:501 stock/serializers.py:659 stock/serializers.py:755 -#: stock/serializers.py:805 stock/serializers.py:1114 stock/serializers.py:1203 -#: stock/serializers.py:1368 stock/templates/stock/stock_sidebar.html:25 +#: part/models.py:3218 part/templates/part/part_sidebar.html:63 +#: report/templates/report/inventree_build_order_report.html:172 +#: stock/admin.py:226 stock/models.py:2325 stock/models.py:2442 +#: stock/serializers.py:630 stock/serializers.py:788 stock/serializers.py:884 +#: stock/serializers.py:934 stock/serializers.py:1243 stock/serializers.py:1332 +#: stock/serializers.py:1497 stock/templates/stock/stock_sidebar.html:25 #: templates/js/translated/barcode.js:143 templates/js/translated/bom.js:1265 #: templates/js/translated/company.js:1684 templates/js/translated/order.js:347 #: templates/js/translated/part.js:1080 -#: templates/js/translated/purchase_order.js:2201 -#: templates/js/translated/return_order.js:776 -#: templates/js/translated/sales_order.js:1067 -#: templates/js/translated/sales_order.js:1982 -#: templates/js/translated/stock.js:1533 templates/js/translated/stock.js:2427 +#: templates/js/translated/purchase_order.js:2200 +#: templates/js/translated/return_order.js:775 +#: templates/js/translated/sales_order.js:1103 +#: templates/js/translated/sales_order.js:2018 +#: templates/js/translated/stock.js:1536 templates/js/translated/stock.js:2428 msgid "Notes" msgstr "备注" @@ -138,7 +138,7 @@ msgstr "提供的电子邮件域未被核准。" msgid "Registration is disabled." msgstr "" -#: InvenTree/helpers.py:525 order/models.py:541 order/models.py:743 +#: InvenTree/helpers.py:525 order/models.py:562 order/models.py:764 msgid "Invalid quantity provided" msgstr "提供的数量无效" @@ -341,14 +341,18 @@ msgid "Turkish" msgstr "土耳其语" #: InvenTree/locales.py:48 +msgid "Ukrainian" +msgstr "" + +#: InvenTree/locales.py:49 msgid "Vietnamese" msgstr "越南语" -#: InvenTree/locales.py:49 +#: InvenTree/locales.py:50 msgid "Chinese (Simplified)" msgstr "" -#: InvenTree/locales.py:50 +#: InvenTree/locales.py:51 msgid "Chinese (Traditional)" msgstr "" @@ -370,145 +374,145 @@ msgstr "电子邮件" msgid "Error running plugin validation" msgstr "读取文件时发生错误 (无效编码)" -#: InvenTree/models.py:162 +#: InvenTree/models.py:176 msgid "Metadata must be a python dict object" msgstr "" -#: InvenTree/models.py:168 +#: InvenTree/models.py:182 msgid "Plugin Metadata" msgstr "" -#: InvenTree/models.py:169 +#: InvenTree/models.py:183 msgid "JSON metadata field, for use by external plugins" msgstr "" -#: InvenTree/models.py:399 +#: InvenTree/models.py:413 msgid "Improperly formatted pattern" msgstr "格式不正确" -#: InvenTree/models.py:406 +#: InvenTree/models.py:420 msgid "Unknown format key specified" msgstr "指定了未知格式密钥" -#: InvenTree/models.py:412 +#: InvenTree/models.py:426 msgid "Missing required format key" msgstr "缺少必需的格式密钥" -#: InvenTree/models.py:423 +#: InvenTree/models.py:437 msgid "Reference field cannot be empty" msgstr "引用字段不能为空" -#: InvenTree/models.py:431 +#: InvenTree/models.py:445 msgid "Reference must match required pattern" msgstr "引用必须匹配所需的图案" -#: InvenTree/models.py:462 +#: InvenTree/models.py:476 msgid "Reference number is too large" msgstr "参考编号过大" -#: InvenTree/models.py:536 +#: InvenTree/models.py:550 msgid "Missing file" msgstr "缺少文件" -#: InvenTree/models.py:537 +#: InvenTree/models.py:551 msgid "Missing external link" msgstr "缺少外部链接" -#: InvenTree/models.py:558 stock/models.py:2444 +#: InvenTree/models.py:572 stock/models.py:2437 #: templates/js/translated/attachment.js:119 #: templates/js/translated/attachment.js:326 msgid "Attachment" msgstr "附件" -#: InvenTree/models.py:559 +#: InvenTree/models.py:573 msgid "Select file to attach" msgstr "选择附件" -#: InvenTree/models.py:567 common/models.py:3018 company/models.py:146 -#: company/models.py:457 company/models.py:514 company/models.py:830 -#: order/models.py:291 order/models.py:1288 order/models.py:1702 -#: part/admin.py:55 part/models.py:919 +#: InvenTree/models.py:581 common/models.py:3041 company/models.py:146 +#: company/models.py:457 company/models.py:514 company/models.py:831 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 +#: part/admin.py:55 part/models.py:962 #: part/templates/part/part_scheduling.html:11 -#: report/templates/report/inventree_build_order_base.html:164 +#: report/templates/report/inventree_build_order_report.html:164 #: stock/admin.py:225 templates/js/translated/company.js:1319 #: templates/js/translated/company.js:1673 templates/js/translated/order.js:351 -#: templates/js/translated/part.js:2456 -#: templates/js/translated/purchase_order.js:2041 -#: templates/js/translated/purchase_order.js:2205 -#: templates/js/translated/return_order.js:780 -#: templates/js/translated/sales_order.js:1056 -#: templates/js/translated/sales_order.js:1987 +#: templates/js/translated/part.js:2455 +#: templates/js/translated/purchase_order.js:2040 +#: templates/js/translated/purchase_order.js:2204 +#: templates/js/translated/return_order.js:779 +#: templates/js/translated/sales_order.js:1092 +#: templates/js/translated/sales_order.js:2023 msgid "Link" msgstr "链接" -#: InvenTree/models.py:568 build/models.py:315 part/models.py:920 -#: stock/models.py:819 +#: InvenTree/models.py:582 build/models.py:345 part/models.py:963 +#: stock/models.py:836 msgid "Link to external URL" msgstr "链接到外部 URL" -#: InvenTree/models.py:574 templates/js/translated/attachment.js:120 +#: InvenTree/models.py:588 templates/js/translated/attachment.js:120 #: templates/js/translated/attachment.js:341 msgid "Comment" msgstr "注释" -#: InvenTree/models.py:575 +#: InvenTree/models.py:589 msgid "File comment" msgstr "文件注释" -#: InvenTree/models.py:583 InvenTree/models.py:584 common/models.py:2494 -#: common/models.py:2495 common/models.py:2719 common/models.py:2720 -#: common/models.py:2965 common/models.py:2966 part/models.py:3185 -#: part/models.py:3272 part/models.py:3365 part/models.py:3393 -#: plugin/models.py:250 plugin/models.py:251 -#: report/templates/report/inventree_test_report_base.html:105 +#: InvenTree/models.py:597 InvenTree/models.py:598 common/models.py:2517 +#: common/models.py:2518 common/models.py:2742 common/models.py:2743 +#: common/models.py:2988 common/models.py:2989 part/models.py:3228 +#: part/models.py:3315 part/models.py:3408 part/models.py:3436 +#: plugin/models.py:259 plugin/models.py:260 +#: report/templates/report/inventree_test_report.html:105 #: templates/js/translated/stock.js:3036 users/models.py:111 msgid "User" msgstr "用户" -#: InvenTree/models.py:588 +#: InvenTree/models.py:602 msgid "upload date" msgstr "上传日期" -#: InvenTree/models.py:610 +#: InvenTree/models.py:624 msgid "Filename must not be empty" msgstr "文件名不能为空!" -#: InvenTree/models.py:621 +#: InvenTree/models.py:635 msgid "Invalid attachment directory" msgstr "非法的附件目录" -#: InvenTree/models.py:651 +#: InvenTree/models.py:665 #, python-brace-format msgid "Filename contains illegal character '{c}'" msgstr "文件名包含非法字符 '{c}'" -#: InvenTree/models.py:654 +#: InvenTree/models.py:668 msgid "Filename missing extension" msgstr "缺少文件名扩展" -#: InvenTree/models.py:663 +#: InvenTree/models.py:677 msgid "Attachment with this filename already exists" msgstr "使用此文件名的附件已存在" -#: InvenTree/models.py:670 +#: InvenTree/models.py:684 msgid "Error renaming file" msgstr "重命名文件出错" -#: InvenTree/models.py:846 +#: InvenTree/models.py:860 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:863 +#: InvenTree/models.py:877 msgid "Invalid choice" msgstr "选择无效" -#: InvenTree/models.py:893 common/models.py:2706 common/models.py:3104 -#: common/serializers.py:370 company/models.py:613 label/models.py:120 -#: machine/models.py:24 part/models.py:855 part/models.py:3616 -#: plugin/models.py:41 report/models.py:176 stock/models.py:76 +#: InvenTree/models.py:907 common/models.py:2729 common/models.py:3127 +#: common/serializers.py:403 company/models.py:614 machine/models.py:24 +#: part/models.py:898 part/models.py:3659 plugin/models.py:50 +#: report/models.py:149 stock/models.py:72 #: templates/InvenTree/settings/mixins/urls.html:13 #: templates/InvenTree/settings/notifications.html:17 -#: templates/InvenTree/settings/plugin.html:81 +#: templates/InvenTree/settings/plugin.html:83 #: templates/InvenTree/settings/plugin_settings.html:22 #: templates/InvenTree/settings/settings_staff_js.html:67 #: templates/InvenTree/settings/settings_staff_js.html:446 @@ -518,100 +522,100 @@ msgstr "选择无效" #: templates/js/translated/company.js:1165 #: templates/js/translated/company.js:1413 templates/js/translated/part.js:1186 #: templates/js/translated/part.js:1474 templates/js/translated/part.js:1610 -#: templates/js/translated/part.js:2749 templates/js/translated/stock.js:2716 +#: templates/js/translated/part.js:2748 templates/js/translated/stock.js:2716 msgid "Name" msgstr "名称" -#: InvenTree/models.py:899 build/models.py:188 +#: InvenTree/models.py:913 build/models.py:218 #: build/templates/build/detail.html:24 common/models.py:136 -#: company/models.py:522 company/models.py:838 +#: company/models.py:523 company/models.py:840 #: company/templates/company/company_base.html:77 #: company/templates/company/manufacturer_part.html:75 -#: company/templates/company/supplier_part.html:107 label/models.py:127 -#: order/models.py:277 order/models.py:1316 part/admin.py:303 part/admin.py:414 -#: part/models.py:878 part/models.py:3631 part/templates/part/category.html:82 +#: company/templates/company/supplier_part.html:107 order/models.py:289 +#: order/models.py:1365 part/admin.py:305 part/admin.py:416 part/models.py:921 +#: part/models.py:3674 part/templates/part/category.html:82 #: part/templates/part/part_base.html:170 -#: part/templates/part/part_scheduling.html:12 report/models.py:189 -#: report/models.py:655 report/models.py:729 -#: report/templates/report/inventree_build_order_base.html:117 -#: stock/admin.py:55 stock/models.py:82 stock/templates/stock/location.html:125 +#: part/templates/part/part_scheduling.html:12 report/models.py:155 +#: report/models.py:509 report/models.py:535 +#: report/templates/report/inventree_build_order_report.html:117 +#: stock/admin.py:55 stock/models.py:78 stock/templates/stock/location.html:125 #: templates/InvenTree/settings/notifications.html:19 #: templates/InvenTree/settings/plugin_settings.html:27 #: templates/InvenTree/settings/settings_staff_js.html:170 #: templates/InvenTree/settings/settings_staff_js.html:451 #: templates/js/translated/bom.js:633 templates/js/translated/bom.js:963 -#: templates/js/translated/build.js:2137 templates/js/translated/company.js:519 +#: templates/js/translated/build.js:2139 templates/js/translated/company.js:519 #: templates/js/translated/company.js:1330 #: templates/js/translated/company.js:1641 templates/js/translated/index.js:119 #: templates/js/translated/order.js:298 templates/js/translated/part.js:1238 #: templates/js/translated/part.js:1483 templates/js/translated/part.js:1621 -#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2355 -#: templates/js/translated/part.js:2785 templates/js/translated/part.js:2896 +#: templates/js/translated/part.js:1958 templates/js/translated/part.js:2354 +#: templates/js/translated/part.js:2784 templates/js/translated/part.js:2895 #: templates/js/translated/plugin.js:80 -#: templates/js/translated/purchase_order.js:1707 -#: templates/js/translated/purchase_order.js:1850 -#: templates/js/translated/purchase_order.js:2023 -#: templates/js/translated/return_order.js:314 -#: templates/js/translated/sales_order.js:802 -#: templates/js/translated/sales_order.js:1812 -#: templates/js/translated/stock.js:1512 templates/js/translated/stock.js:2057 +#: templates/js/translated/purchase_order.js:1706 +#: templates/js/translated/purchase_order.js:1849 +#: templates/js/translated/purchase_order.js:2022 +#: templates/js/translated/return_order.js:313 +#: templates/js/translated/sales_order.js:838 +#: templates/js/translated/sales_order.js:1848 +#: templates/js/translated/stock.js:1515 templates/js/translated/stock.js:2058 #: templates/js/translated/stock.js:2748 templates/js/translated/stock.js:2831 msgid "Description" msgstr "描述信息" -#: InvenTree/models.py:900 stock/models.py:83 +#: InvenTree/models.py:914 stock/models.py:79 msgid "Description (optional)" msgstr "描述 (可选)" -#: InvenTree/models.py:909 +#: InvenTree/models.py:923 msgid "parent" msgstr "上级项" -#: InvenTree/models.py:915 templates/js/translated/part.js:2794 +#: InvenTree/models.py:929 templates/js/translated/part.js:2793 #: templates/js/translated/stock.js:2757 msgid "Path" msgstr "路径" -#: InvenTree/models.py:1021 +#: InvenTree/models.py:1035 #, fuzzy #| msgid "Add transaction note (optional)" msgid "Markdown notes (optional)" msgstr "添加交易备注 (可选)" -#: InvenTree/models.py:1050 +#: InvenTree/models.py:1064 msgid "Barcode Data" msgstr "条码数据" -#: InvenTree/models.py:1051 +#: InvenTree/models.py:1065 msgid "Third party barcode data" msgstr "第三方条形码数据" -#: InvenTree/models.py:1057 +#: InvenTree/models.py:1071 msgid "Barcode Hash" msgstr "条码哈希" -#: InvenTree/models.py:1058 +#: InvenTree/models.py:1072 msgid "Unique hash of barcode data" msgstr "条码数据的唯一哈希" -#: InvenTree/models.py:1111 +#: InvenTree/models.py:1125 msgid "Existing barcode found" msgstr "发现现有条码" -#: InvenTree/models.py:1154 +#: InvenTree/models.py:1168 msgid "Server Error" msgstr "服务器错误" -#: InvenTree/models.py:1155 +#: InvenTree/models.py:1169 msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/serializers.py:62 part/models.py:4169 +#: InvenTree/serializers.py:62 part/models.py:4212 msgid "Must be a valid number" msgstr "必须是有效数字" #: InvenTree/serializers.py:99 company/models.py:183 -#: company/templates/company/company_base.html:112 part/models.py:2993 +#: company/templates/company/company_base.html:112 part/models.py:3036 #: templates/InvenTree/settings/settings_staff_js.html:44 #: templates/currency_data.html:5 msgid "Currency" @@ -707,7 +711,7 @@ msgstr "远程图像文件的 URL" msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图像" -#: InvenTree/status.py:66 part/serializers.py:1161 +#: InvenTree/status.py:66 part/serializers.py:1178 msgid "Background worker check failed" msgstr "后台工作人员检查失败" @@ -719,218 +723,6 @@ msgstr "未配置电子邮件后端" msgid "InvenTree system health checks failed" msgstr "InventTree系统健康检查失败" -#: InvenTree/status_codes.py:12 InvenTree/status_codes.py:37 -#: InvenTree/status_codes.py:148 InvenTree/status_codes.py:164 -#: InvenTree/status_codes.py:182 generic/states/tests.py:17 -#: templates/js/translated/table_filters.js:598 -msgid "Pending" -msgstr "待定" - -#: InvenTree/status_codes.py:13 generic/states/tests.py:18 -msgid "Placed" -msgstr "已添加" - -#: InvenTree/status_codes.py:14 InvenTree/status_codes.py:151 -#: InvenTree/status_codes.py:169 generic/states/tests.py:19 -#: order/templates/order/order_base.html:158 -#: order/templates/order/sales_order_base.html:161 -msgid "Complete" -msgstr "完成" - -#: InvenTree/status_codes.py:15 InvenTree/status_codes.py:44 -#: InvenTree/status_codes.py:150 InvenTree/status_codes.py:170 -msgid "Cancelled" -msgstr "已取消" - -#: InvenTree/status_codes.py:16 InvenTree/status_codes.py:45 -#: InvenTree/status_codes.py:67 -msgid "Lost" -msgstr "丢失" - -#: InvenTree/status_codes.py:17 InvenTree/status_codes.py:46 -#: InvenTree/status_codes.py:73 -msgid "Returned" -msgstr "已退回" - -#: InvenTree/status_codes.py:40 InvenTree/status_codes.py:167 -msgid "In Progress" -msgstr "" - -#: InvenTree/status_codes.py:43 order/models.py:1564 -#: templates/js/translated/sales_order.js:1523 -#: templates/js/translated/sales_order.js:1644 -#: templates/js/translated/sales_order.js:1957 -msgid "Shipped" -msgstr "已发货" - -#: InvenTree/status_codes.py:62 -msgid "OK" -msgstr "OK" - -#: InvenTree/status_codes.py:63 -msgid "Attention needed" -msgstr "需要关注" - -#: InvenTree/status_codes.py:64 -msgid "Damaged" -msgstr "破损" - -#: InvenTree/status_codes.py:65 -msgid "Destroyed" -msgstr "已销毁" - -#: InvenTree/status_codes.py:66 -msgid "Rejected" -msgstr "已拒绝" - -#: InvenTree/status_codes.py:70 -msgid "Quarantined" -msgstr "隔离" - -#: InvenTree/status_codes.py:91 -msgid "Legacy stock tracking entry" -msgstr "旧库存跟踪条目" - -#: InvenTree/status_codes.py:93 templates/js/translated/stock.js:544 -msgid "Stock item created" -msgstr "库存项已创建" - -#: InvenTree/status_codes.py:96 -msgid "Edited stock item" -msgstr "已编辑库存项" - -#: InvenTree/status_codes.py:97 -msgid "Assigned serial number" -msgstr "已分配序列号" - -#: InvenTree/status_codes.py:100 -msgid "Stock counted" -msgstr "库存计数" - -#: InvenTree/status_codes.py:101 -msgid "Stock manually added" -msgstr "已手动添加库存" - -#: InvenTree/status_codes.py:102 -msgid "Stock manually removed" -msgstr "库存手动删除" - -#: InvenTree/status_codes.py:105 -msgid "Location changed" -msgstr "仓储地点已更改" - -#: InvenTree/status_codes.py:106 -#, fuzzy -#| msgid "Stock counted" -msgid "Stock updated" -msgstr "库存计数" - -#: InvenTree/status_codes.py:109 -msgid "Installed into assembly" -msgstr "安装到组装中" - -#: InvenTree/status_codes.py:110 -msgid "Removed from assembly" -msgstr "已从组装中删除" - -#: InvenTree/status_codes.py:112 -msgid "Installed component item" -msgstr "已安装组件项" - -#: InvenTree/status_codes.py:113 -msgid "Removed component item" -msgstr "已删除组件项" - -#: InvenTree/status_codes.py:116 -msgid "Split from parent item" -msgstr "从父项拆分" - -#: InvenTree/status_codes.py:117 -msgid "Split child item" -msgstr "拆分子项" - -#: InvenTree/status_codes.py:120 templates/js/translated/stock.js:1855 -msgid "Merged stock items" -msgstr "合并的库存项目" - -#: InvenTree/status_codes.py:123 -msgid "Converted to variant" -msgstr "转换为变量" - -#: InvenTree/status_codes.py:126 -msgid "Build order output created" -msgstr "已创建生产订单输出" - -#: InvenTree/status_codes.py:127 -msgid "Build order output completed" -msgstr "生产订单输出已完成" - -#: InvenTree/status_codes.py:128 -#, fuzzy -#| msgid "Build order output created" -msgid "Build order output rejected" -msgstr "已创建生产订单输出" - -#: InvenTree/status_codes.py:129 templates/js/translated/stock.js:1761 -msgid "Consumed by build order" -msgstr "被生产订单消耗" - -#: InvenTree/status_codes.py:132 -#, fuzzy -#| msgid "Received against purchase order" -msgid "Shipped against Sales Order" -msgstr "收到定购单" - -#: InvenTree/status_codes.py:135 -#, fuzzy -#| msgid "Received against purchase order" -msgid "Received against Purchase Order" -msgstr "收到定购单" - -#: InvenTree/status_codes.py:138 -#, fuzzy -#| msgid "Received against purchase order" -msgid "Returned against Return Order" -msgstr "收到定购单" - -#: InvenTree/status_codes.py:141 templates/js/translated/table_filters.js:375 -msgid "Sent to customer" -msgstr "发送给客户" - -#: InvenTree/status_codes.py:142 -msgid "Returned from customer" -msgstr "从客户退货" - -#: InvenTree/status_codes.py:149 -msgid "Production" -msgstr "生产中" - -#: InvenTree/status_codes.py:185 -#, fuzzy -#| msgid "Returned" -msgid "Return" -msgstr "已退回" - -#: InvenTree/status_codes.py:188 -msgid "Repair" -msgstr "" - -#: InvenTree/status_codes.py:191 -#, fuzzy -#| msgid "Placed" -msgid "Replace" -msgstr "已添加" - -#: InvenTree/status_codes.py:194 -msgid "Refund" -msgstr "" - -#: InvenTree/status_codes.py:197 -#, fuzzy -#| msgid "Rejected" -msgid "Reject" -msgstr "已拒绝" - #: InvenTree/templatetags/inventree_extras.py:183 msgid "Unknown database" msgstr "" @@ -981,45 +773,45 @@ msgstr "系统信息" msgid "About InvenTree" msgstr "关于 InventTree" -#: build/api.py:238 +#: build/api.py:255 msgid "Build must be cancelled before it can be deleted" msgstr "在删除前必须取消生产" -#: build/api.py:282 part/models.py:4047 templates/js/translated/bom.js:997 -#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2521 +#: build/api.py:299 part/models.py:4090 templates/js/translated/bom.js:997 +#: templates/js/translated/bom.js:1037 templates/js/translated/build.js:2520 #: templates/js/translated/table_filters.js:190 #: templates/js/translated/table_filters.js:583 msgid "Consumable" msgstr "" -#: build/api.py:283 part/models.py:4041 part/templates/part/upload_bom.html:58 +#: build/api.py:300 part/models.py:4084 part/templates/part/upload_bom.html:58 #: templates/js/translated/bom.js:1001 templates/js/translated/bom.js:1028 -#: templates/js/translated/build.js:2530 +#: templates/js/translated/build.js:2529 #: templates/js/translated/table_filters.js:186 #: templates/js/translated/table_filters.js:215 #: templates/js/translated/table_filters.js:587 msgid "Optional" msgstr "可选项" -#: build/api.py:284 templates/js/translated/table_filters.js:408 +#: build/api.py:301 templates/js/translated/table_filters.js:408 #: templates/js/translated/table_filters.js:579 msgid "Tracked" msgstr "" -#: build/api.py:286 part/admin.py:144 templates/js/translated/build.js:1741 -#: templates/js/translated/build.js:2630 -#: templates/js/translated/sales_order.js:1929 +#: build/api.py:303 part/admin.py:144 templates/js/translated/build.js:1744 +#: templates/js/translated/build.js:2629 +#: templates/js/translated/sales_order.js:1965 #: templates/js/translated/table_filters.js:571 msgid "Allocated" msgstr "" -#: build/api.py:294 company/models.py:902 company/serializers.py:383 +#: build/api.py:311 company/models.py:904 company/serializers.py:383 #: company/templates/company/supplier_part.html:114 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 -#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2562 +#: templates/js/translated/bom.js:1162 templates/js/translated/build.js:2561 #: templates/js/translated/index.js:123 -#: templates/js/translated/model_renderers.js:228 +#: templates/js/translated/model_renderers.js:234 #: templates/js/translated/part.js:692 templates/js/translated/part.js:694 #: templates/js/translated/part.js:699 #: templates/js/translated/table_filters.js:340 @@ -1027,16 +819,16 @@ msgstr "" msgid "Available" msgstr "空闲" -#: build/models.py:74 build/templates/build/build_base.html:9 +#: build/models.py:83 build/templates/build/build_base.html:9 #: build/templates/build/build_base.html:27 -#: report/templates/report/inventree_build_order_base.html:105 -#: templates/email/build_order_completed.html:16 +#: report/templates/report/inventree_build_order_report.html:105 +#: stock/serializers.py:83 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 #: templates/js/translated/build.js:972 templates/js/translated/stock.js:2892 msgid "Build Order" msgstr "生产订单" -#: build/models.py:75 build/templates/build/build_base.html:13 +#: build/models.py:84 build/templates/build/build_base.html:13 #: build/templates/build/index.html:8 build/templates/build/index.html:12 #: order/templates/order/sales_order_detail.html:111 #: order/templates/order/so_sidebar.html:13 @@ -1047,247 +839,247 @@ msgstr "生产订单" msgid "Build Orders" msgstr "生产订单" -#: build/models.py:116 +#: build/models.py:131 msgid "Invalid choice for parent build" msgstr "上级生产选项无效" -#: build/models.py:127 order/models.py:239 +#: build/models.py:142 order/models.py:240 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:133 +#: build/models.py:148 #, fuzzy #| msgid "Order cannot be cancelled" msgid "Build order part cannot be changed" msgstr "无法取消订单" -#: build/models.py:179 +#: build/models.py:209 msgid "Build Order Reference" msgstr "相关生产订单" -#: build/models.py:180 order/models.py:442 order/models.py:898 -#: order/models.py:1276 order/models.py:1996 part/admin.py:417 -#: part/models.py:4062 part/templates/part/upload_bom.html:54 +#: build/models.py:210 order/models.py:463 order/models.py:928 +#: order/models.py:1325 order/models.py:2056 part/admin.py:419 +#: part/models.py:4105 part/templates/part/upload_bom.html:54 #: report/templates/report/inventree_bill_of_materials_report.html:139 -#: report/templates/report/inventree_po_report_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:26 -#: report/templates/report/inventree_so_report_base.html:28 +#: report/templates/report/inventree_purchase_order_report.html:28 +#: report/templates/report/inventree_return_order_report.html:26 +#: report/templates/report/inventree_sales_order_report.html:28 #: templates/js/translated/bom.js:770 templates/js/translated/bom.js:973 -#: templates/js/translated/build.js:2513 templates/js/translated/order.js:291 +#: templates/js/translated/build.js:2512 templates/js/translated/order.js:291 #: templates/js/translated/pricing.js:386 -#: templates/js/translated/purchase_order.js:2066 -#: templates/js/translated/return_order.js:729 -#: templates/js/translated/sales_order.js:1818 +#: templates/js/translated/purchase_order.js:2065 +#: templates/js/translated/return_order.js:728 +#: templates/js/translated/sales_order.js:1854 msgid "Reference" msgstr "引用" -#: build/models.py:191 +#: build/models.py:221 #, fuzzy #| msgid "Brief description of the build" msgid "Brief description of the build (optional)" msgstr "生产的简短描述." -#: build/models.py:199 build/templates/build/build_base.html:183 +#: build/models.py:229 build/templates/build/build_base.html:183 #: build/templates/build/detail.html:87 msgid "Parent Build" msgstr "上级生产" -#: build/models.py:200 +#: build/models.py:230 msgid "BuildOrder to which this build is allocated" msgstr "此次生产匹配的订单" -#: build/models.py:205 build/templates/build/build_base.html:97 -#: build/templates/build/detail.html:29 company/models.py:1056 order/api.py:817 -#: order/models.py:1401 order/models.py:1544 order/models.py:1545 -#: part/api.py:1547 part/api.py:1841 part/models.py:390 part/models.py:3004 -#: part/models.py:3148 part/models.py:3292 part/models.py:3315 -#: part/models.py:3336 part/models.py:3358 part/models.py:3468 -#: part/models.py:3764 part/models.py:3920 part/models.py:4013 -#: part/models.py:4374 part/serializers.py:1107 part/serializers.py:1713 +#: build/models.py:235 build/templates/build/build_base.html:97 +#: build/templates/build/detail.html:29 company/models.py:1058 order/api.py:821 +#: order/models.py:1450 order/models.py:1595 order/models.py:1596 +#: part/api.py:1501 part/api.py:1795 part/models.py:392 part/models.py:3047 +#: part/models.py:3191 part/models.py:3335 part/models.py:3358 +#: part/models.py:3379 part/models.py:3401 part/models.py:3511 +#: part/models.py:3807 part/models.py:3963 part/models.py:4056 +#: part/models.py:4417 part/serializers.py:1124 part/serializers.py:1730 #: part/templates/part/part_app_base.html:8 #: part/templates/part/part_pricing.html:12 #: part/templates/part/upload_bom.html:52 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 -#: report/templates/report/inventree_build_order_base.html:109 -#: report/templates/report/inventree_po_report_base.html:27 -#: report/templates/report/inventree_return_order_report_base.html:24 -#: report/templates/report/inventree_slr_report.html:102 -#: report/templates/report/inventree_so_report_base.html:27 -#: stock/serializers.py:267 stock/serializers.py:689 -#: templates/InvenTree/search.html:82 +#: report/templates/report/inventree_build_order_report.html:109 +#: report/templates/report/inventree_purchase_order_report.html:27 +#: report/templates/report/inventree_return_order_report.html:24 +#: report/templates/report/inventree_sales_order_report.html:27 +#: report/templates/report/inventree_stock_location_report.html:102 +#: stock/serializers.py:110 stock/serializers.py:158 stock/serializers.py:396 +#: stock/serializers.py:818 templates/InvenTree/search.html:82 #: templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 #: templates/js/translated/barcode.js:546 templates/js/translated/bom.js:632 #: templates/js/translated/bom.js:769 templates/js/translated/bom.js:905 -#: templates/js/translated/build.js:1309 templates/js/translated/build.js:1740 -#: templates/js/translated/build.js:2160 templates/js/translated/build.js:2333 +#: templates/js/translated/build.js:1312 templates/js/translated/build.js:1743 +#: templates/js/translated/build.js:2162 templates/js/translated/build.js:2335 #: templates/js/translated/company.js:348 #: templates/js/translated/company.js:1116 #: templates/js/translated/company.js:1271 #: templates/js/translated/company.js:1559 templates/js/translated/index.js:109 #: templates/js/translated/part.js:1943 templates/js/translated/part.js:2015 -#: templates/js/translated/part.js:2324 templates/js/translated/pricing.js:369 +#: templates/js/translated/part.js:2323 templates/js/translated/pricing.js:369 #: templates/js/translated/purchase_order.js:751 #: templates/js/translated/purchase_order.js:1304 -#: templates/js/translated/purchase_order.js:1849 -#: templates/js/translated/purchase_order.js:2008 -#: templates/js/translated/return_order.js:539 -#: templates/js/translated/return_order.js:710 +#: templates/js/translated/purchase_order.js:1848 +#: templates/js/translated/purchase_order.js:2007 +#: templates/js/translated/return_order.js:538 +#: templates/js/translated/return_order.js:709 #: templates/js/translated/sales_order.js:300 -#: templates/js/translated/sales_order.js:1197 -#: templates/js/translated/sales_order.js:1598 -#: templates/js/translated/sales_order.js:1796 +#: templates/js/translated/sales_order.js:1233 +#: templates/js/translated/sales_order.js:1634 +#: templates/js/translated/sales_order.js:1832 #: templates/js/translated/stock.js:676 templates/js/translated/stock.js:842 -#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1996 +#: templates/js/translated/stock.js:1058 templates/js/translated/stock.js:1997 #: templates/js/translated/stock.js:2857 templates/js/translated/stock.js:3090 #: templates/js/translated/stock.js:3236 msgid "Part" msgstr "商品" -#: build/models.py:213 +#: build/models.py:243 msgid "Select part to build" msgstr "选择要生产的商品" -#: build/models.py:218 +#: build/models.py:248 msgid "Sales Order Reference" msgstr "相关销售订单" -#: build/models.py:222 +#: build/models.py:252 msgid "SalesOrder to which this build is allocated" msgstr "此次生产匹配的销售订单" -#: build/models.py:227 build/serializers.py:964 -#: templates/js/translated/build.js:1728 -#: templates/js/translated/sales_order.js:1185 +#: build/models.py:257 build/serializers.py:1000 +#: templates/js/translated/build.js:1731 +#: templates/js/translated/sales_order.js:1221 msgid "Source Location" msgstr "来源地点" -#: build/models.py:231 +#: build/models.py:261 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "此次生产从哪个仓储位置获取库存(留空即可从任何仓储位置取出)" -#: build/models.py:236 +#: build/models.py:266 msgid "Destination Location" msgstr "目标地点" -#: build/models.py:240 +#: build/models.py:270 msgid "Select location where the completed items will be stored" msgstr "选择已完成项目仓储地点" -#: build/models.py:244 +#: build/models.py:274 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:247 +#: build/models.py:277 msgid "Number of stock items to build" msgstr "要生产的项目数量" -#: build/models.py:251 +#: build/models.py:281 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:253 +#: build/models.py:283 msgid "Number of stock items which have been completed" msgstr "已完成的库存项目数量" -#: build/models.py:257 +#: build/models.py:287 msgid "Build Status" msgstr "生产状态" -#: build/models.py:261 +#: build/models.py:291 msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:270 build/serializers.py:280 order/serializers.py:577 -#: stock/models.py:823 stock/serializers.py:1333 +#: build/models.py:300 build/serializers.py:287 order/serializers.py:581 +#: stock/models.py:840 stock/serializers.py:75 stock/serializers.py:1462 #: templates/js/translated/purchase_order.js:1129 msgid "Batch Code" msgstr "批量代码" -#: build/models.py:274 build/serializers.py:281 +#: build/models.py:304 build/serializers.py:288 msgid "Batch code for this build output" msgstr "此生产产出的批量代码" -#: build/models.py:277 order/models.py:304 part/models.py:1079 -#: part/templates/part/part_base.html:310 -#: templates/js/translated/return_order.js:339 -#: templates/js/translated/sales_order.js:827 +#: build/models.py:307 order/models.py:316 order/serializers.py:120 +#: part/models.py:1122 part/templates/part/part_base.html:310 +#: templates/js/translated/return_order.js:338 +#: templates/js/translated/sales_order.js:863 msgid "Creation Date" msgstr "创建日期" -#: build/models.py:281 +#: build/models.py:311 msgid "Target completion date" msgstr "预计完成日期" -#: build/models.py:282 +#: build/models.py:312 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产完成的目标日期。生产将在此日期之后逾期。" -#: build/models.py:285 order/models.py:500 order/models.py:2041 -#: templates/js/translated/build.js:2245 +#: build/models.py:315 order/models.py:521 order/models.py:2101 +#: templates/js/translated/build.js:2247 msgid "Completion Date" msgstr "完成日期:" -#: build/models.py:291 +#: build/models.py:321 msgid "completed by" msgstr "完成人" -#: build/models.py:299 templates/js/translated/build.js:2205 +#: build/models.py:329 templates/js/translated/build.js:2207 msgid "Issued by" msgstr "发布者" -#: build/models.py:300 +#: build/models.py:330 msgid "User who issued this build order" msgstr "发布此生产订单的用户" -#: build/models.py:308 build/templates/build/build_base.html:204 +#: build/models.py:338 build/templates/build/build_base.html:204 #: build/templates/build/detail.html:122 common/models.py:145 -#: order/models.py:322 order/templates/order/order_base.html:217 +#: order/models.py:334 order/templates/order/order_base.html:217 #: order/templates/order/return_order_base.html:188 -#: order/templates/order/sales_order_base.html:228 part/models.py:1096 +#: order/templates/order/sales_order_base.html:232 part/models.py:1139 #: part/templates/part/part_base.html:390 -#: report/templates/report/inventree_build_order_base.html:158 +#: report/templates/report/inventree_build_order_report.html:158 #: templates/InvenTree/settings/settings_staff_js.html:150 -#: templates/js/translated/build.js:2217 -#: templates/js/translated/purchase_order.js:1764 -#: templates/js/translated/return_order.js:359 +#: templates/js/translated/build.js:2219 +#: templates/js/translated/purchase_order.js:1763 +#: templates/js/translated/return_order.js:358 #: templates/js/translated/table_filters.js:531 msgid "Responsible" msgstr "责任人" -#: build/models.py:309 +#: build/models.py:339 msgid "User or group responsible for this build order" msgstr "构建此订单的用户或组" -#: build/models.py:314 build/templates/build/detail.html:108 +#: build/models.py:344 build/templates/build/detail.html:108 #: company/templates/company/manufacturer_part.html:107 #: company/templates/company/supplier_part.html:194 #: order/templates/order/order_base.html:167 #: order/templates/order/return_order_base.html:145 -#: order/templates/order/sales_order_base.html:180 -#: part/templates/part/part_base.html:383 stock/models.py:819 +#: order/templates/order/sales_order_base.html:184 +#: part/templates/part/part_base.html:383 stock/models.py:836 #: stock/templates/stock/item_base.html:200 #: templates/js/translated/company.js:1019 msgid "External Link" msgstr "外部链接" -#: build/models.py:319 +#: build/models.py:349 msgid "Build Priority" msgstr "创建优先级" -#: build/models.py:322 +#: build/models.py:352 msgid "Priority of this build order" msgstr "此构建订单的优先级" -#: build/models.py:329 common/models.py:129 order/admin.py:18 -#: order/models.py:286 templates/InvenTree/settings/settings_staff_js.html:146 -#: templates/js/translated/build.js:2142 -#: templates/js/translated/purchase_order.js:1711 -#: templates/js/translated/return_order.js:318 -#: templates/js/translated/sales_order.js:806 +#: build/models.py:359 common/models.py:129 order/admin.py:18 +#: order/models.py:298 templates/InvenTree/settings/settings_staff_js.html:146 +#: templates/js/translated/build.js:2144 +#: templates/js/translated/purchase_order.js:1710 +#: templates/js/translated/return_order.js:317 +#: templates/js/translated/sales_order.js:842 #: templates/js/translated/table_filters.js:48 #: templates/project_code_data.html:6 #, fuzzy @@ -1295,486 +1087,539 @@ msgstr "此构建订单的优先级" msgid "Project Code" msgstr "商品二维码" -#: build/models.py:330 +#: build/models.py:360 #, fuzzy #| msgid "Priority of this build order" msgid "Project code for this build order" msgstr "此构建订单的优先级" -#: build/models.py:581 +#: build/models.py:593 build/models.py:658 +msgid "Failed to offload task to complete build allocations" +msgstr "" + +#: build/models.py:615 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生产订单 {build} 已完成" -#: build/models.py:587 +#: build/models.py:621 msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:805 build/models.py:880 +#: build/models.py:847 build/models.py:932 msgid "No build output specified" msgstr "未指定生产产出" -#: build/models.py:808 +#: build/models.py:850 msgid "Build output is already completed" msgstr "生产产出已完成" -#: build/models.py:811 +#: build/models.py:853 msgid "Build output does not match Build Order" msgstr "生产产出与订单不匹配" -#: build/models.py:884 build/serializers.py:223 build/serializers.py:262 -#: build/serializers.py:831 order/models.py:538 order/serializers.py:429 -#: order/serializers.py:572 part/serializers.py:1471 part/serializers.py:1871 -#: stock/models.py:662 stock/models.py:1474 stock/serializers.py:472 +#: build/models.py:936 build/serializers.py:220 build/serializers.py:269 +#: build/serializers.py:867 order/models.py:559 order/serializers.py:433 +#: order/serializers.py:576 part/serializers.py:1488 part/serializers.py:1888 +#: stock/models.py:679 stock/models.py:1499 stock/serializers.py:601 msgid "Quantity must be greater than zero" msgstr "数量必须大于0" -#: build/models.py:889 build/serializers.py:228 +#: build/models.py:941 build/serializers.py:225 #, fuzzy #| msgid "Quantity must be greater than zero" msgid "Quantity cannot be greater than the output quantity" msgstr "数量必须大于0" -#: build/models.py:946 build/serializers.py:533 +#: build/models.py:1001 build/serializers.py:548 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1308 +#: build/models.py:1352 +#, fuzzy +#| msgid "Delete parameters" +msgid "Build Order Line Item" +msgstr "删除参数" + +#: build/models.py:1377 #, fuzzy #| msgid "Build Notes" msgid "Build object" msgstr "生产备注" -#: build/models.py:1322 build/models.py:1578 build/serializers.py:210 -#: build/serializers.py:247 build/templates/build/build_base.html:102 -#: build/templates/build/detail.html:34 common/models.py:2516 -#: order/models.py:1259 order/models.py:1916 order/serializers.py:1335 -#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:416 -#: part/forms.py:48 part/models.py:3162 part/models.py:4035 +#: build/models.py:1391 build/models.py:1647 build/serializers.py:207 +#: build/serializers.py:254 build/templates/build/build_base.html:102 +#: build/templates/build/detail.html:34 common/models.py:2539 +#: order/models.py:1308 order/models.py:1967 order/serializers.py:1339 +#: order/templates/order/order_wizard/match_parts.html:30 part/admin.py:418 +#: part/forms.py:48 part/models.py:3205 part/models.py:4078 #: part/templates/part/part_pricing.html:16 #: part/templates/part/upload_bom.html:53 #: report/templates/report/inventree_bill_of_materials_report.html:138 -#: report/templates/report/inventree_build_order_base.html:113 -#: report/templates/report/inventree_po_report_base.html:29 -#: report/templates/report/inventree_slr_report.html:104 -#: report/templates/report/inventree_so_report_base.html:29 -#: report/templates/report/inventree_test_report_base.html:90 -#: report/templates/report/inventree_test_report_base.html:170 -#: stock/admin.py:160 stock/serializers.py:463 +#: report/templates/report/inventree_build_order_report.html:113 +#: report/templates/report/inventree_purchase_order_report.html:29 +#: report/templates/report/inventree_sales_order_report.html:29 +#: report/templates/report/inventree_stock_location_report.html:104 +#: report/templates/report/inventree_test_report.html:90 +#: report/templates/report/inventree_test_report.html:170 stock/admin.py:160 +#: stock/serializers.py:126 stock/serializers.py:166 stock/serializers.py:592 #: stock/templates/stock/item_base.html:287 #: stock/templates/stock/item_base.html:295 #: stock/templates/stock/item_base.html:342 #: templates/email/build_order_completed.html:18 #: templates/js/translated/barcode.js:548 templates/js/translated/bom.js:771 #: templates/js/translated/bom.js:981 templates/js/translated/build.js:521 -#: templates/js/translated/build.js:737 templates/js/translated/build.js:1366 -#: templates/js/translated/build.js:1743 templates/js/translated/build.js:2355 +#: templates/js/translated/build.js:737 templates/js/translated/build.js:1369 +#: templates/js/translated/build.js:1746 templates/js/translated/build.js:2357 #: templates/js/translated/company.js:1818 -#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/model_renderers.js:236 #: templates/js/translated/order.js:304 templates/js/translated/part.js:961 -#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3341 +#: templates/js/translated/part.js:1811 templates/js/translated/part.js:3340 #: templates/js/translated/pricing.js:381 #: templates/js/translated/pricing.js:474 #: templates/js/translated/pricing.js:522 #: templates/js/translated/pricing.js:616 #: templates/js/translated/purchase_order.js:754 -#: templates/js/translated/purchase_order.js:1853 -#: templates/js/translated/purchase_order.js:2072 +#: templates/js/translated/purchase_order.js:1852 +#: templates/js/translated/purchase_order.js:2071 #: templates/js/translated/sales_order.js:317 -#: templates/js/translated/sales_order.js:1199 -#: templates/js/translated/sales_order.js:1518 -#: templates/js/translated/sales_order.js:1608 -#: templates/js/translated/sales_order.js:1698 -#: templates/js/translated/sales_order.js:1824 +#: templates/js/translated/sales_order.js:1235 +#: templates/js/translated/sales_order.js:1554 +#: templates/js/translated/sales_order.js:1644 +#: templates/js/translated/sales_order.js:1734 +#: templates/js/translated/sales_order.js:1860 #: templates/js/translated/stock.js:564 templates/js/translated/stock.js:702 #: templates/js/translated/stock.js:873 templates/js/translated/stock.js:3021 #: templates/js/translated/stock.js:3104 msgid "Quantity" msgstr "数量" -#: build/models.py:1323 +#: build/models.py:1392 #, fuzzy #| msgid "Stock required for build order" msgid "Required quantity for build order" msgstr "生产订单所需的库存" -#: build/models.py:1403 +#: build/models.py:1472 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定生产产出,因为主部件已经被标记为可追踪的" -#: build/models.py:1412 +#: build/models.py:1481 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1422 order/models.py:1867 +#: build/models.py:1491 order/models.py:1918 msgid "Stock item is over-allocated" msgstr "库存物品分配过度!" -#: build/models.py:1428 order/models.py:1870 +#: build/models.py:1497 order/models.py:1921 msgid "Allocation quantity must be greater than zero" msgstr "分配数量必须大于0" -#: build/models.py:1434 +#: build/models.py:1503 msgid "Quantity must be 1 for serialized stock" msgstr "序列化库存的数量必须是 1" -#: build/models.py:1493 +#: build/models.py:1562 #, fuzzy #| msgid "Selected stock item not found in BOM" msgid "Selected stock item does not match BOM line" msgstr "在BOM中找不到选定的库存项" -#: build/models.py:1565 build/serializers.py:811 order/serializers.py:1179 -#: order/serializers.py:1200 stock/serializers.py:566 stock/serializers.py:1052 -#: stock/serializers.py:1164 stock/templates/stock/item_base.html:10 +#: build/models.py:1634 build/serializers.py:847 order/serializers.py:1183 +#: order/serializers.py:1204 stock/models.py:360 stock/serializers.py:92 +#: stock/serializers.py:695 stock/serializers.py:1181 stock/serializers.py:1293 +#: stock/templates/stock/item_base.html:10 #: stock/templates/stock/item_base.html:23 #: stock/templates/stock/item_base.html:194 -#: templates/js/translated/build.js:1742 +#: templates/js/translated/build.js:1745 #: templates/js/translated/sales_order.js:301 -#: templates/js/translated/sales_order.js:1198 -#: templates/js/translated/sales_order.js:1499 -#: templates/js/translated/sales_order.js:1504 -#: templates/js/translated/sales_order.js:1605 -#: templates/js/translated/sales_order.js:1692 +#: templates/js/translated/sales_order.js:1234 +#: templates/js/translated/sales_order.js:1535 +#: templates/js/translated/sales_order.js:1540 +#: templates/js/translated/sales_order.js:1641 +#: templates/js/translated/sales_order.js:1728 #: templates/js/translated/stock.js:677 templates/js/translated/stock.js:843 #: templates/js/translated/stock.js:2977 msgid "Stock Item" msgstr "库存项" -#: build/models.py:1566 +#: build/models.py:1635 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:1579 +#: build/models.py:1648 msgid "Stock quantity to allocate to build" msgstr "分配到生产的数量" -#: build/models.py:1587 +#: build/models.py:1656 msgid "Install into" msgstr "安装到" -#: build/models.py:1588 +#: build/models.py:1657 msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:160 build/serializers.py:840 -#: templates/js/translated/build.js:1319 +#: build/serializers.py:157 build/serializers.py:876 +#: templates/js/translated/build.js:1322 msgid "Build Output" msgstr "生产产出" -#: build/serializers.py:172 +#: build/serializers.py:169 msgid "Build output does not match the parent build" msgstr "生产产出与对应生产不匹配" -#: build/serializers.py:176 +#: build/serializers.py:173 msgid "Output part does not match BuildOrder part" msgstr "产出部件与生产订单部件不匹配" -#: build/serializers.py:180 +#: build/serializers.py:177 msgid "This build output has already been completed" msgstr "此生产产出已经完成" -#: build/serializers.py:191 +#: build/serializers.py:188 msgid "This build output is not fully allocated" msgstr "生产产出未被完成分配" -#: build/serializers.py:211 build/serializers.py:248 +#: build/serializers.py:208 build/serializers.py:255 msgid "Enter quantity for build output" msgstr "输入生产产出数量" -#: build/serializers.py:269 +#: build/serializers.py:276 msgid "Integer quantity required for trackable parts" msgstr "对于可追踪的部件,需要整数型数值" -#: build/serializers.py:272 +#: build/serializers.py:279 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "需要整数型数值,因为BOM包含可追踪的部件" -#: build/serializers.py:287 order/serializers.py:585 order/serializers.py:1339 -#: stock/serializers.py:483 templates/js/translated/purchase_order.js:1153 +#: build/serializers.py:294 order/serializers.py:589 order/serializers.py:1343 +#: stock/serializers.py:612 templates/js/translated/purchase_order.js:1153 #: templates/js/translated/stock.js:367 templates/js/translated/stock.js:565 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:288 +#: build/serializers.py:295 msgid "Enter serial numbers for build outputs" msgstr "输入生产产出的序列号" -#: build/serializers.py:301 -msgid "Auto Allocate Serial Numbers" -msgstr "自动分配序列号" - -#: build/serializers.py:302 -msgid "Automatically allocate required items with matching serial numbers" -msgstr "自动为所需项分配对应的序列号" - -#: build/serializers.py:337 stock/api.py:995 -msgid "The following serial numbers already exist or are invalid" -msgstr "以下序列号已存在或无效" - -#: build/serializers.py:388 build/serializers.py:450 build/serializers.py:539 -msgid "A list of build outputs must be provided" -msgstr "必须提供生产产出列表" - -#: build/serializers.py:426 build/serializers.py:498 order/serializers.py:561 -#: order/serializers.py:669 order/serializers.py:1675 part/serializers.py:1127 -#: stock/serializers.py:494 stock/serializers.py:654 stock/serializers.py:750 -#: stock/serializers.py:1196 stock/serializers.py:1452 -#: stock/templates/stock/item_base.html:394 +#: build/serializers.py:300 build/serializers.py:441 build/serializers.py:513 +#: order/serializers.py:565 order/serializers.py:673 order/serializers.py:1679 +#: part/serializers.py:1144 stock/serializers.py:101 stock/serializers.py:623 +#: stock/serializers.py:783 stock/serializers.py:879 stock/serializers.py:1325 +#: stock/serializers.py:1581 stock/templates/stock/item_base.html:394 #: templates/js/translated/barcode.js:547 -#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:999 -#: templates/js/translated/build.js:2370 +#: templates/js/translated/barcode.js:795 templates/js/translated/build.js:1001 +#: templates/js/translated/build.js:2372 #: templates/js/translated/purchase_order.js:1178 #: templates/js/translated/purchase_order.js:1268 -#: templates/js/translated/sales_order.js:1511 -#: templates/js/translated/sales_order.js:1619 -#: templates/js/translated/sales_order.js:1627 -#: templates/js/translated/sales_order.js:1706 +#: templates/js/translated/sales_order.js:1547 +#: templates/js/translated/sales_order.js:1655 +#: templates/js/translated/sales_order.js:1663 +#: templates/js/translated/sales_order.js:1742 #: templates/js/translated/stock.js:678 templates/js/translated/stock.js:844 -#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2200 +#: templates/js/translated/stock.js:1060 templates/js/translated/stock.js:2201 #: templates/js/translated/stock.js:2871 msgid "Location" msgstr "地点" -#: build/serializers.py:427 +#: build/serializers.py:301 +#, fuzzy +#| msgid "Stock item created" +msgid "Stock location for build output" +msgstr "库存项已创建" + +#: build/serializers.py:315 +msgid "Auto Allocate Serial Numbers" +msgstr "自动分配序列号" + +#: build/serializers.py:316 +msgid "Automatically allocate required items with matching serial numbers" +msgstr "自动为所需项分配对应的序列号" + +#: build/serializers.py:331 +#, fuzzy +#| msgid "Integer quantity required for trackable parts" +msgid "Serial numbers must be provided for trackable parts" +msgstr "对于可追踪的部件,需要整数型数值" + +#: build/serializers.py:356 stock/api.py:1031 +msgid "The following serial numbers already exist or are invalid" +msgstr "以下序列号已存在或无效" + +#: build/serializers.py:403 build/serializers.py:465 build/serializers.py:554 +msgid "A list of build outputs must be provided" +msgstr "必须提供生产产出列表" + +#: build/serializers.py:442 #, fuzzy #| msgid "Stock item created" msgid "Stock location for scrapped outputs" msgstr "库存项已创建" -#: build/serializers.py:433 +#: build/serializers.py:448 #, fuzzy #| msgid "Stock Locations" msgid "Discard Allocations" msgstr "仓储地点" -#: build/serializers.py:434 +#: build/serializers.py:449 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:439 +#: build/serializers.py:454 #, fuzzy #| msgid "Location for completed build outputs" msgid "Reason for scrapping build output(s)" msgstr "已完成生产产出的仓储地点" -#: build/serializers.py:499 +#: build/serializers.py:514 msgid "Location for completed build outputs" msgstr "已完成生产产出的仓储地点" -#: build/serializers.py:505 build/templates/build/build_base.html:151 -#: build/templates/build/detail.html:62 order/models.py:922 -#: order/models.py:2020 order/serializers.py:593 stock/admin.py:165 -#: stock/serializers.py:801 stock/serializers.py:1340 +#: build/serializers.py:520 build/templates/build/build_base.html:151 +#: build/templates/build/detail.html:62 order/models.py:952 +#: order/models.py:2080 order/serializers.py:597 stock/admin.py:165 +#: stock/serializers.py:930 stock/serializers.py:1469 #: stock/templates/stock/item_base.html:427 -#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2189 +#: templates/js/translated/barcode.js:252 templates/js/translated/build.js:2191 #: templates/js/translated/purchase_order.js:1308 -#: templates/js/translated/purchase_order.js:1723 -#: templates/js/translated/return_order.js:331 -#: templates/js/translated/sales_order.js:819 -#: templates/js/translated/stock.js:2175 templates/js/translated/stock.js:2995 +#: templates/js/translated/purchase_order.js:1722 +#: templates/js/translated/return_order.js:330 +#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/stock.js:2176 templates/js/translated/stock.js:2995 #: templates/js/translated/stock.js:3120 msgid "Status" msgstr "状态" -#: build/serializers.py:511 +#: build/serializers.py:526 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:512 +#: build/serializers.py:527 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未完成分配,完成产出" -#: build/serializers.py:592 -msgid "Remove Allocated Stock" +#: build/serializers.py:612 +#, fuzzy +#| msgid "Remove Allocated Stock" +msgid "Consume Allocated Stock" msgstr "移除已分配的库存" -#: build/serializers.py:593 -msgid "Subtract any stock which has already been allocated to this build" +#: build/serializers.py:613 +#, fuzzy +#| msgid "Subtract any stock which has already been allocated to this build" +msgid "Consume any stock which has already been allocated to this build" msgstr "减去已经分配至此生产的库存" -#: build/serializers.py:599 +#: build/serializers.py:619 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:600 +#: build/serializers.py:620 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的生产产出" -#: build/serializers.py:627 +#: build/serializers.py:647 msgid "Not permitted" msgstr "" -#: build/serializers.py:628 +#: build/serializers.py:648 msgid "Accept as consumed by this build order" msgstr "接受此构建订单所消耗的内容" -#: build/serializers.py:629 +#: build/serializers.py:649 msgid "Deallocate before completing this build order" msgstr "在完成此构建订单前取消分配" -#: build/serializers.py:651 +#: build/serializers.py:679 msgid "Overallocated Stock" msgstr "超出分配的库存" -#: build/serializers.py:653 +#: build/serializers.py:681 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "你想如何处理分配给构建订单的额外库存物品" -#: build/serializers.py:663 +#: build/serializers.py:691 msgid "Some stock items have been overallocated" msgstr "一些库存项已被过度分配" -#: build/serializers.py:668 +#: build/serializers.py:696 msgid "Accept Unallocated" msgstr "接受未分配的" -#: build/serializers.py:669 +#: build/serializers.py:697 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完成分配至此生产订单" -#: build/serializers.py:679 templates/js/translated/build.js:315 +#: build/serializers.py:707 templates/js/translated/build.js:315 msgid "Required stock has not been fully allocated" msgstr "所需库存尚未完全分配" -#: build/serializers.py:684 order/serializers.py:297 order/serializers.py:1242 +#: build/serializers.py:712 order/serializers.py:301 order/serializers.py:1246 msgid "Accept Incomplete" msgstr "接受未完成" -#: build/serializers.py:685 +#: build/serializers.py:713 msgid "Accept that the required number of build outputs have not been completed" msgstr "接受所需的生产产出未完成" -#: build/serializers.py:695 templates/js/translated/build.js:319 +#: build/serializers.py:723 templates/js/translated/build.js:319 msgid "Required build quantity has not been completed" msgstr "所需生产数量尚未完成" -#: build/serializers.py:704 templates/js/translated/build.js:303 +#: build/serializers.py:732 templates/js/translated/build.js:303 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:734 +#: build/serializers.py:770 #, fuzzy #| msgid "Build actions" msgid "Build Line" msgstr "生产操作" -#: build/serializers.py:744 +#: build/serializers.py:780 msgid "Build output" msgstr "生产产出" -#: build/serializers.py:752 +#: build/serializers.py:788 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:788 +#: build/serializers.py:824 #, fuzzy #| msgid "Delete parameters" msgid "Build Line Item" msgstr "删除参数" -#: build/serializers.py:802 +#: build/serializers.py:838 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单指向相同的部件" -#: build/serializers.py:817 stock/serializers.py:1065 +#: build/serializers.py:853 stock/serializers.py:1194 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:865 order/serializers.py:1233 +#: build/serializers.py:901 order/serializers.py:1237 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出了限制" -#: build/serializers.py:871 +#: build/serializers.py:907 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的部件的分配,必须指定生产产出" -#: build/serializers.py:878 +#: build/serializers.py:914 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的部件,无法指定生产产出" -#: build/serializers.py:902 order/serializers.py:1485 +#: build/serializers.py:938 order/serializers.py:1489 msgid "Allocation items must be provided" msgstr "必须提供分配的项" -#: build/serializers.py:965 +#: build/serializers.py:1001 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部件来源的仓储地点(留空则可来源于任何仓储地点)" -#: build/serializers.py:973 +#: build/serializers.py:1009 msgid "Exclude Location" msgstr "排除地点" -#: build/serializers.py:974 +#: build/serializers.py:1010 msgid "Exclude stock items from this selected location" msgstr "从该选定的仓储地点排除库存项" -#: build/serializers.py:979 +#: build/serializers.py:1015 msgid "Interchangeable Stock" msgstr "可互换的库存" -#: build/serializers.py:980 +#: build/serializers.py:1016 msgid "Stock items in multiple locations can be used interchangeably" msgstr "多处地点的库存项可以互换使用" -#: build/serializers.py:985 +#: build/serializers.py:1021 msgid "Substitute Stock" msgstr "可替换的库存" -#: build/serializers.py:986 +#: build/serializers.py:1022 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的部件" -#: build/serializers.py:991 +#: build/serializers.py:1027 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:992 +#: build/serializers.py:1028 msgid "Allocate optional BOM items to build order" msgstr "分配可选的BOM项目来建立订单" -#: build/serializers.py:1097 part/models.py:3930 part/models.py:4366 -#: stock/api.py:758 +#: build/serializers.py:1050 +msgid "Failed to start auto-allocation task" +msgstr "" + +#: build/serializers.py:1140 part/models.py:3973 part/models.py:4409 +#: stock/api.py:794 msgid "BOM Item" msgstr "BOM项" -#: build/serializers.py:1106 templates/js/translated/index.js:130 +#: build/serializers.py:1149 templates/js/translated/index.js:130 msgid "Allocated Stock" msgstr "" -#: build/serializers.py:1111 part/admin.py:132 part/bom.py:173 -#: part/serializers.py:817 part/serializers.py:1489 +#: build/serializers.py:1154 part/admin.py:132 part/bom.py:173 +#: part/serializers.py:832 part/serializers.py:1506 #: part/templates/part/part_base.html:210 templates/js/translated/bom.js:1208 -#: templates/js/translated/build.js:2614 templates/js/translated/part.js:709 +#: templates/js/translated/build.js:2613 templates/js/translated/part.js:709 #: templates/js/translated/part.js:2148 #: templates/js/translated/table_filters.js:170 msgid "On Order" msgstr "" -#: build/serializers.py:1116 part/serializers.py:1491 -#: templates/js/translated/build.js:2618 +#: build/serializers.py:1159 part/serializers.py:1508 +#: templates/js/translated/build.js:2617 #: templates/js/translated/table_filters.js:360 msgid "In Production" msgstr "正在生产" -#: build/serializers.py:1121 part/bom.py:172 part/serializers.py:1514 +#: build/serializers.py:1164 part/bom.py:172 part/serializers.py:1531 #: part/templates/part/part_base.html:192 -#: templates/js/translated/sales_order.js:1893 +#: templates/js/translated/sales_order.js:1929 msgid "Available Stock" msgstr "可用库存" -#: build/tasks.py:172 +#: build/status_codes.py:11 generic/states/tests.py:17 order/status_codes.py:12 +#: order/status_codes.py:37 order/status_codes.py:64 order/status_codes.py:82 +#: templates/js/translated/table_filters.js:598 +msgid "Pending" +msgstr "待定" + +#: build/status_codes.py:12 +msgid "Production" +msgstr "生产中" + +#: build/status_codes.py:13 order/status_codes.py:15 order/status_codes.py:45 +#: order/status_codes.py:70 +msgid "Cancelled" +msgstr "已取消" + +#: build/status_codes.py:14 generic/states/tests.py:19 order/status_codes.py:14 +#: order/status_codes.py:44 order/status_codes.py:69 +#: order/templates/order/order_base.html:158 +#: order/templates/order/sales_order_base.html:165 report/models.py:443 +msgid "Complete" +msgstr "完成" + +#: build/tasks.py:184 msgid "Stock required for build order" msgstr "生产订单所需的库存" -#: build/tasks.py:189 +#: build/tasks.py:201 msgid "Overdue Build Order" msgstr "超时构建顺序" -#: build/tasks.py:194 +#: build/tasks.py:206 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "生成订单 {bo} 现在已过期" @@ -1893,18 +1738,18 @@ msgid "Stock has not been fully allocated to this Build Order" msgstr "库存尚未被完全分配到此构建订单" #: build/templates/build/build_base.html:160 -#: build/templates/build/detail.html:138 order/models.py:297 -#: order/models.py:1294 order/templates/order/order_base.html:186 +#: build/templates/build/detail.html:138 order/models.py:309 +#: order/models.py:1343 order/templates/order/order_base.html:186 #: order/templates/order/return_order_base.html:164 -#: order/templates/order/sales_order_base.html:192 -#: report/templates/report/inventree_build_order_base.html:125 -#: templates/js/translated/build.js:2237 templates/js/translated/part.js:1830 -#: templates/js/translated/purchase_order.js:1740 -#: templates/js/translated/purchase_order.js:2148 -#: templates/js/translated/return_order.js:347 -#: templates/js/translated/return_order.js:751 -#: templates/js/translated/sales_order.js:835 -#: templates/js/translated/sales_order.js:1867 +#: order/templates/order/sales_order_base.html:196 +#: report/templates/report/inventree_build_order_report.html:125 +#: templates/js/translated/build.js:2239 templates/js/translated/part.js:1830 +#: templates/js/translated/purchase_order.js:1739 +#: templates/js/translated/purchase_order.js:2147 +#: templates/js/translated/return_order.js:346 +#: templates/js/translated/return_order.js:750 +#: templates/js/translated/sales_order.js:871 +#: templates/js/translated/sales_order.js:1903 msgid "Target Date" msgstr "预计日期" @@ -1917,7 +1762,7 @@ msgstr "此次生产的截止日期为 %(target)s" #: build/templates/build/build_base.html:222 #: order/templates/order/order_base.html:122 #: order/templates/order/return_order_base.html:117 -#: order/templates/order/sales_order_base.html:122 +#: order/templates/order/sales_order_base.html:126 #: templates/js/translated/table_filters.js:98 #: templates/js/translated/table_filters.js:524 #: templates/js/translated/table_filters.js:626 @@ -1931,44 +1776,44 @@ msgid "Completed Outputs" msgstr "已完成输出" #: build/templates/build/build_base.html:190 -#: build/templates/build/detail.html:101 order/api.py:1507 order/models.py:1536 -#: order/models.py:1650 order/models.py:1804 +#: build/templates/build/detail.html:101 order/api.py:1511 order/models.py:847 +#: order/models.py:1587 order/models.py:1701 order/models.py:1855 #: order/templates/order/sales_order_base.html:9 #: order/templates/order/sales_order_base.html:28 -#: report/templates/report/inventree_build_order_base.html:135 -#: report/templates/report/inventree_so_report_base.html:14 +#: report/templates/report/inventree_build_order_report.html:135 +#: report/templates/report/inventree_sales_order_report.html:14 #: stock/templates/stock/item_base.html:369 #: templates/email/overdue_sales_order.html:15 #: templates/js/translated/pricing.js:929 -#: templates/js/translated/sales_order.js:769 -#: templates/js/translated/sales_order.js:992 +#: templates/js/translated/sales_order.js:805 +#: templates/js/translated/sales_order.js:1028 #: templates/js/translated/stock.js:2924 msgid "Sales Order" msgstr "销售订单" #: build/templates/build/build_base.html:197 #: build/templates/build/detail.html:115 -#: report/templates/report/inventree_build_order_base.html:152 +#: report/templates/report/inventree_build_order_report.html:152 #: templates/js/translated/table_filters.js:24 msgid "Issued By" msgstr "发布者" #: build/templates/build/build_base.html:211 -#: build/templates/build/detail.html:94 templates/js/translated/build.js:2154 +#: build/templates/build/detail.html:94 templates/js/translated/build.js:2156 msgid "Priority" msgstr "优先级" -#: build/templates/build/build_base.html:273 +#: build/templates/build/build_base.html:269 msgid "Delete Build Order" msgstr "删除生产订单" -#: build/templates/build/build_base.html:283 +#: build/templates/build/build_base.html:279 #, fuzzy #| msgid "Build Order" msgid "Build Order QR Code" msgstr "生产订单" -#: build/templates/build/build_base.html:295 +#: build/templates/build/build_base.html:291 #, fuzzy #| msgid "Print Build Orders" msgid "Link Barcode to Build Order" @@ -1986,8 +1831,8 @@ msgstr "库存来源" msgid "Stock can be taken from any available location." msgstr "库存可以从任何可用的地点获得。" -#: build/templates/build/detail.html:49 order/models.py:1430 -#: templates/js/translated/purchase_order.js:2190 +#: build/templates/build/detail.html:49 order/models.py:1479 +#: templates/js/translated/purchase_order.js:2189 msgid "Destination" msgstr "目的地" @@ -2001,10 +1846,10 @@ msgstr "已分配的部件" #: build/templates/build/detail.html:80 stock/admin.py:163 #: stock/templates/stock/item_base.html:162 -#: templates/js/translated/build.js:1377 -#: templates/js/translated/model_renderers.js:235 +#: templates/js/translated/build.js:1380 +#: templates/js/translated/model_renderers.js:241 #: templates/js/translated/purchase_order.js:1274 -#: templates/js/translated/stock.js:1130 templates/js/translated/stock.js:2189 +#: templates/js/translated/stock.js:1133 templates/js/translated/stock.js:2190 #: templates/js/translated/stock.js:3127 #: templates/js/translated/table_filters.js:313 #: templates/js/translated/table_filters.js:404 @@ -2014,8 +1859,8 @@ msgstr "批量" #: build/templates/build/detail.html:133 #: order/templates/order/order_base.html:173 #: order/templates/order/return_order_base.html:151 -#: order/templates/order/sales_order_base.html:186 -#: templates/js/translated/build.js:2197 +#: order/templates/order/sales_order_base.html:190 +#: templates/js/translated/build.js:2199 msgid "Created" msgstr "已创建" @@ -2024,7 +1869,7 @@ msgid "No target date set" msgstr "无预计日期" #: build/templates/build/detail.html:149 -#: order/templates/order/sales_order_base.html:202 +#: order/templates/order/sales_order_base.html:206 #: templates/js/translated/table_filters.js:689 msgid "Completed" msgstr "已完成" @@ -2126,11 +1971,11 @@ msgstr "附件" msgid "Build Notes" msgstr "生产备注" -#: build/templates/build/detail.html:434 +#: build/templates/build/detail.html:435 msgid "Allocation Complete" msgstr "分配完成" -#: build/templates/build/detail.html:435 +#: build/templates/build/detail.html:436 #, fuzzy #| msgid "Required stock has not been fully allocated" msgid "All lines have been fully allocated" @@ -2215,1508 +2060,1537 @@ msgstr "商品描述" msgid "User or group responsible for this project" msgstr "负责此订单的用户或群组" -#: common/models.py:765 +#: common/models.py:766 msgid "Settings key (must be unique - case insensitive)" msgstr "设置键值(必须是唯一的 - 大小写不敏感)" -#: common/models.py:769 +#: common/models.py:770 msgid "Settings value" msgstr "设定值" -#: common/models.py:821 +#: common/models.py:822 msgid "Chosen value is not a valid option" msgstr "选择的值不是一个有效的选项" -#: common/models.py:837 +#: common/models.py:838 msgid "Value must be a boolean value" msgstr "值必须是布尔量" -#: common/models.py:845 +#: common/models.py:846 msgid "Value must be an integer value" msgstr "值必须为整数" -#: common/models.py:882 +#: common/models.py:883 msgid "Key string must be unique" msgstr "关键字必须是唯一的" -#: common/models.py:1114 +#: common/models.py:1115 msgid "No group" msgstr "无群组" -#: common/models.py:1157 +#: common/models.py:1158 msgid "An empty domain is not allowed." msgstr "不允许空域。" -#: common/models.py:1159 +#: common/models.py:1160 #, python-brace-format msgid "Invalid domain name: {domain}" msgstr "无效的域名: {domain}" -#: common/models.py:1171 +#: common/models.py:1172 #, fuzzy #| msgid "Subcategories" msgid "No plugin" msgstr "子类别" -#: common/models.py:1259 +#: common/models.py:1260 msgid "Restart required" msgstr "需要重启" -#: common/models.py:1261 +#: common/models.py:1262 msgid "A setting has been changed which requires a server restart" msgstr "设置已更改,需要服务器重启" -#: common/models.py:1268 +#: common/models.py:1269 #, fuzzy #| msgid "Printing Actions" msgid "Pending migrations" msgstr "打印操作" -#: common/models.py:1269 +#: common/models.py:1270 msgid "Number of pending database migrations" msgstr "" -#: common/models.py:1274 +#: common/models.py:1275 msgid "Server Instance Name" msgstr "服务器实例名称" -#: common/models.py:1276 +#: common/models.py:1277 msgid "String descriptor for the server instance" msgstr "" -#: common/models.py:1280 +#: common/models.py:1281 msgid "Use instance name" msgstr "" -#: common/models.py:1281 +#: common/models.py:1282 msgid "Use the instance name in the title-bar" msgstr "" -#: common/models.py:1286 +#: common/models.py:1287 msgid "Restrict showing `about`" msgstr "" -#: common/models.py:1287 +#: common/models.py:1288 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/models.py:1292 company/models.py:108 company/models.py:109 +#: common/models.py:1293 company/models.py:108 company/models.py:109 msgid "Company name" msgstr "公司名称" -#: common/models.py:1293 +#: common/models.py:1294 msgid "Internal company name" msgstr "内部公司名称" -#: common/models.py:1297 +#: common/models.py:1298 msgid "Base URL" msgstr "" -#: common/models.py:1298 +#: common/models.py:1299 msgid "Base URL for server instance" msgstr "" -#: common/models.py:1304 +#: common/models.py:1305 msgid "Default Currency" msgstr "" -#: common/models.py:1305 +#: common/models.py:1306 msgid "Select base currency for pricing calculations" msgstr "" -#: common/models.py:1311 +#: common/models.py:1312 msgid "Currency Update Interval" msgstr "" -#: common/models.py:1313 +#: common/models.py:1314 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/models.py:1316 common/models.py:1372 common/models.py:1385 -#: common/models.py:1393 common/models.py:1402 common/models.py:1411 -#: common/models.py:1613 common/models.py:1635 common/models.py:1750 -#: common/models.py:2053 +#: common/models.py:1317 common/models.py:1373 common/models.py:1386 +#: common/models.py:1394 common/models.py:1403 common/models.py:1412 +#: common/models.py:1620 common/models.py:1642 common/models.py:1757 +#: common/models.py:2076 msgid "days" msgstr "天" -#: common/models.py:1320 +#: common/models.py:1321 msgid "Currency Update Plugin" msgstr "" -#: common/models.py:1321 +#: common/models.py:1322 msgid "Currency update plugin to use" msgstr "" -#: common/models.py:1326 +#: common/models.py:1327 msgid "Download from URL" msgstr "" -#: common/models.py:1328 +#: common/models.py:1329 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/models.py:1334 +#: common/models.py:1335 msgid "Download Size Limit" msgstr "" -#: common/models.py:1335 +#: common/models.py:1336 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/models.py:1341 +#: common/models.py:1342 msgid "User-agent used to download from URL" msgstr "" -#: common/models.py:1343 +#: common/models.py:1344 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/models.py:1348 +#: common/models.py:1349 msgid "Strict URL Validation" msgstr "" -#: common/models.py:1349 +#: common/models.py:1350 msgid "Require schema specification when validating URLs" msgstr "" -#: common/models.py:1354 +#: common/models.py:1355 msgid "Require confirm" msgstr "" -#: common/models.py:1355 +#: common/models.py:1356 msgid "Require explicit user confirmation for certain action." msgstr "" -#: common/models.py:1360 +#: common/models.py:1361 msgid "Tree Depth" msgstr "" -#: common/models.py:1362 +#: common/models.py:1363 msgid "Default tree depth for treeview. Deeper levels can be lazy loaded as they are needed." msgstr "" -#: common/models.py:1368 +#: common/models.py:1369 msgid "Update Check Interval" msgstr "" -#: common/models.py:1369 +#: common/models.py:1370 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/models.py:1375 +#: common/models.py:1376 msgid "Automatic Backup" msgstr "" -#: common/models.py:1376 +#: common/models.py:1377 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/models.py:1381 +#: common/models.py:1382 msgid "Auto Backup Interval" msgstr "" -#: common/models.py:1382 +#: common/models.py:1383 msgid "Specify number of days between automated backup events" msgstr "" -#: common/models.py:1388 +#: common/models.py:1389 msgid "Task Deletion Interval" msgstr "" -#: common/models.py:1390 +#: common/models.py:1391 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/models.py:1397 +#: common/models.py:1398 msgid "Error Log Deletion Interval" msgstr "" -#: common/models.py:1399 +#: common/models.py:1400 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/models.py:1406 +#: common/models.py:1407 msgid "Notification Deletion Interval" msgstr "" -#: common/models.py:1408 +#: common/models.py:1409 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/models.py:1415 templates/InvenTree/settings/sidebar.html:31 +#: common/models.py:1416 templates/InvenTree/settings/sidebar.html:31 msgid "Barcode Support" msgstr "" -#: common/models.py:1416 +#: common/models.py:1417 #, fuzzy #| msgid "Enable barcode scanner support" msgid "Enable barcode scanner support in the web interface" msgstr "启用条形码扫描支持" -#: common/models.py:1421 +#: common/models.py:1422 msgid "Barcode Input Delay" msgstr "" -#: common/models.py:1422 +#: common/models.py:1423 msgid "Barcode input processing delay time" msgstr "" -#: common/models.py:1428 +#: common/models.py:1429 msgid "Barcode Webcam Support" msgstr "" -#: common/models.py:1429 +#: common/models.py:1430 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/models.py:1434 +#: common/models.py:1435 #, fuzzy #| msgid "Part description" msgid "Part Revisions" msgstr "商品描述" -#: common/models.py:1435 +#: common/models.py:1436 #, fuzzy #| msgid "Enable internal prices for parts" msgid "Enable revision field for Part" msgstr "启用内部商品价格" -#: common/models.py:1440 +#: common/models.py:1441 +#, fuzzy +#| msgid "Removed from assembly" +msgid "Allow Deletion from Assembly" +msgstr "已从组装中删除" + +#: common/models.py:1442 +msgid "Allow deletion of parts which are used in an assembly" +msgstr "" + +#: common/models.py:1447 msgid "IPN Regex" msgstr "" -#: common/models.py:1441 +#: common/models.py:1448 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/models.py:1444 +#: common/models.py:1451 msgid "Allow Duplicate IPN" msgstr "" -#: common/models.py:1445 +#: common/models.py:1452 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/models.py:1450 +#: common/models.py:1457 msgid "Allow Editing IPN" msgstr "" -#: common/models.py:1451 +#: common/models.py:1458 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/models.py:1456 +#: common/models.py:1463 msgid "Copy Part BOM Data" msgstr "" -#: common/models.py:1457 +#: common/models.py:1464 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/models.py:1462 +#: common/models.py:1469 msgid "Copy Part Parameter Data" msgstr "" -#: common/models.py:1463 +#: common/models.py:1470 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/models.py:1468 +#: common/models.py:1475 msgid "Copy Part Test Data" msgstr "" -#: common/models.py:1469 +#: common/models.py:1476 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/models.py:1474 +#: common/models.py:1481 msgid "Copy Category Parameter Templates" msgstr "" -#: common/models.py:1475 +#: common/models.py:1482 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/models.py:1480 part/admin.py:108 part/models.py:3772 -#: report/models.py:182 stock/serializers.py:99 +#: common/models.py:1487 part/admin.py:108 part/models.py:3815 +#: report/models.py:293 report/models.py:360 report/serializers.py:90 +#: report/serializers.py:131 stock/serializers.py:228 #: templates/js/translated/table_filters.js:139 #: templates/js/translated/table_filters.js:767 msgid "Template" msgstr "模板" -#: common/models.py:1481 +#: common/models.py:1488 msgid "Parts are templates by default" msgstr "" -#: common/models.py:1486 part/admin.py:91 part/admin.py:431 part/models.py:1016 +#: common/models.py:1493 part/admin.py:91 part/admin.py:433 part/models.py:1059 #: templates/js/translated/bom.js:1639 #: templates/js/translated/table_filters.js:330 #: templates/js/translated/table_filters.js:721 msgid "Assembly" msgstr "组装" -#: common/models.py:1487 +#: common/models.py:1494 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/models.py:1492 part/admin.py:95 part/models.py:1022 +#: common/models.py:1499 part/admin.py:95 part/models.py:1065 #: templates/js/translated/table_filters.js:729 msgid "Component" msgstr "组件" -#: common/models.py:1493 +#: common/models.py:1500 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/models.py:1498 part/admin.py:100 part/models.py:1034 +#: common/models.py:1505 part/admin.py:100 part/models.py:1077 msgid "Purchaseable" msgstr "可购买" -#: common/models.py:1499 +#: common/models.py:1506 msgid "Parts are purchaseable by default" msgstr "商品默认可购买" -#: common/models.py:1504 part/admin.py:104 part/models.py:1040 +#: common/models.py:1511 part/admin.py:104 part/models.py:1083 #: templates/js/translated/table_filters.js:755 msgid "Salable" msgstr "可销售" -#: common/models.py:1505 +#: common/models.py:1512 msgid "Parts are salable by default" msgstr "商品默认可销售" -#: common/models.py:1510 part/admin.py:113 part/models.py:1028 +#: common/models.py:1517 part/admin.py:113 part/models.py:1071 #: templates/js/translated/table_filters.js:147 #: templates/js/translated/table_filters.js:223 #: templates/js/translated/table_filters.js:771 msgid "Trackable" msgstr "可追踪" -#: common/models.py:1511 +#: common/models.py:1518 msgid "Parts are trackable by default" msgstr "商品默认可跟踪" -#: common/models.py:1516 part/admin.py:117 part/models.py:1050 +#: common/models.py:1523 part/admin.py:117 part/models.py:1093 #: part/templates/part/part_base.html:154 #: templates/js/translated/table_filters.js:143 #: templates/js/translated/table_filters.js:775 msgid "Virtual" msgstr "虚拟" -#: common/models.py:1517 +#: common/models.py:1524 msgid "Parts are virtual by default" msgstr "商品默认是虚拟的" -#: common/models.py:1522 +#: common/models.py:1529 msgid "Show Import in Views" msgstr "视图中显示导入" -#: common/models.py:1523 +#: common/models.py:1530 msgid "Display the import wizard in some part views" msgstr "在一些商品视图中显示导入向导" -#: common/models.py:1528 +#: common/models.py:1535 msgid "Show related parts" msgstr "显示相关商品" -#: common/models.py:1529 +#: common/models.py:1536 msgid "Display related parts for a part" msgstr "" -#: common/models.py:1534 +#: common/models.py:1541 msgid "Initial Stock Data" msgstr "" -#: common/models.py:1535 +#: common/models.py:1542 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/models.py:1540 templates/js/translated/part.js:107 +#: common/models.py:1547 templates/js/translated/part.js:107 msgid "Initial Supplier Data" msgstr "" -#: common/models.py:1542 +#: common/models.py:1549 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/models.py:1548 +#: common/models.py:1555 msgid "Part Name Display Format" msgstr "" -#: common/models.py:1549 +#: common/models.py:1556 msgid "Format to display the part name" msgstr "" -#: common/models.py:1555 +#: common/models.py:1562 msgid "Part Category Default Icon" msgstr "" -#: common/models.py:1556 +#: common/models.py:1563 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/models.py:1560 +#: common/models.py:1567 #, fuzzy #| msgid "Parameter units" msgid "Enforce Parameter Units" msgstr "参数单位" -#: common/models.py:1562 +#: common/models.py:1569 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/models.py:1568 +#: common/models.py:1575 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/models.py:1570 +#: common/models.py:1577 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1576 +#: common/models.py:1583 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/models.py:1578 +#: common/models.py:1585 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/models.py:1584 +#: common/models.py:1591 msgid "Use Supplier Pricing" msgstr "" -#: common/models.py:1586 +#: common/models.py:1593 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/models.py:1592 +#: common/models.py:1599 msgid "Purchase History Override" msgstr "" -#: common/models.py:1594 +#: common/models.py:1601 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/models.py:1600 +#: common/models.py:1607 msgid "Use Stock Item Pricing" msgstr "" -#: common/models.py:1602 +#: common/models.py:1609 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/models.py:1608 +#: common/models.py:1615 msgid "Stock Item Pricing Age" msgstr "" -#: common/models.py:1610 +#: common/models.py:1617 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/models.py:1617 +#: common/models.py:1624 msgid "Use Variant Pricing" msgstr "" -#: common/models.py:1618 +#: common/models.py:1625 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/models.py:1623 +#: common/models.py:1630 msgid "Active Variants Only" msgstr "" -#: common/models.py:1625 +#: common/models.py:1632 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/models.py:1631 +#: common/models.py:1638 msgid "Pricing Rebuild Interval" msgstr "" -#: common/models.py:1633 +#: common/models.py:1640 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/models.py:1640 +#: common/models.py:1647 msgid "Internal Prices" msgstr "内部价格" -#: common/models.py:1641 +#: common/models.py:1648 msgid "Enable internal prices for parts" msgstr "启用内部商品价格" -#: common/models.py:1646 +#: common/models.py:1653 msgid "Internal Price Override" msgstr "" -#: common/models.py:1648 +#: common/models.py:1655 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/models.py:1654 +#: common/models.py:1661 msgid "Enable label printing" msgstr "" -#: common/models.py:1655 +#: common/models.py:1662 msgid "Enable label printing from the web interface" msgstr "" -#: common/models.py:1660 +#: common/models.py:1667 msgid "Label Image DPI" msgstr "" -#: common/models.py:1662 +#: common/models.py:1669 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/models.py:1668 +#: common/models.py:1675 msgid "Enable Reports" msgstr "" -#: common/models.py:1669 +#: common/models.py:1676 msgid "Enable generation of reports" msgstr "" -#: common/models.py:1674 templates/stats.html:25 +#: common/models.py:1681 templates/stats.html:25 msgid "Debug Mode" msgstr "调试模式" -#: common/models.py:1675 +#: common/models.py:1682 msgid "Generate reports in debug mode (HTML output)" msgstr "在调试模式生成报告(HTML输出)" -#: common/models.py:1680 +#: common/models.py:1687 #, fuzzy #| msgid "No Reports Found" msgid "Log Report Errors" msgstr "没有找到报表" -#: common/models.py:1681 +#: common/models.py:1688 msgid "Log errors which occur when generating reports" msgstr "" -#: common/models.py:1686 plugin/builtin/labels/label_sheet.py:28 -#: report/models.py:203 +#: common/models.py:1693 plugin/builtin/labels/label_sheet.py:28 +#: report/models.py:301 msgid "Page Size" msgstr "页面大小" -#: common/models.py:1687 +#: common/models.py:1694 msgid "Default page size for PDF reports" msgstr "PDF 报表默认页面大小" -#: common/models.py:1692 +#: common/models.py:1699 msgid "Enable Test Reports" msgstr "" -#: common/models.py:1693 +#: common/models.py:1700 msgid "Enable generation of test reports" msgstr "启用生成测试报表" -#: common/models.py:1698 +#: common/models.py:1705 msgid "Attach Test Reports" msgstr "" -#: common/models.py:1700 +#: common/models.py:1707 msgid "When printing a Test Report, attach a copy of the Test Report to the associated Stock Item" msgstr "" -#: common/models.py:1706 +#: common/models.py:1713 msgid "Globally Unique Serials" msgstr "" -#: common/models.py:1707 +#: common/models.py:1714 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/models.py:1712 +#: common/models.py:1719 msgid "Autofill Serial Numbers" msgstr "" -#: common/models.py:1713 +#: common/models.py:1720 msgid "Autofill serial numbers in forms" msgstr "" -#: common/models.py:1718 +#: common/models.py:1725 msgid "Delete Depleted Stock" msgstr "" -#: common/models.py:1720 +#: common/models.py:1727 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/models.py:1726 +#: common/models.py:1733 msgid "Batch Code Template" msgstr "" -#: common/models.py:1728 +#: common/models.py:1735 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/models.py:1733 +#: common/models.py:1740 msgid "Stock Expiry" msgstr "库存到期" -#: common/models.py:1734 +#: common/models.py:1741 msgid "Enable stock expiry functionality" msgstr "启用库存到期功能" -#: common/models.py:1739 +#: common/models.py:1746 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/models.py:1740 +#: common/models.py:1747 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/models.py:1745 +#: common/models.py:1752 msgid "Stock Stale Time" msgstr "" -#: common/models.py:1747 +#: common/models.py:1754 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/models.py:1754 +#: common/models.py:1761 msgid "Build Expired Stock" msgstr "" -#: common/models.py:1755 +#: common/models.py:1762 msgid "Allow building with expired stock" msgstr "" -#: common/models.py:1760 +#: common/models.py:1767 msgid "Stock Ownership Control" msgstr "库存所有权控制" -#: common/models.py:1761 +#: common/models.py:1768 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/models.py:1766 +#: common/models.py:1773 msgid "Stock Location Default Icon" msgstr "" -#: common/models.py:1767 +#: common/models.py:1774 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/models.py:1771 +#: common/models.py:1778 #, fuzzy #| msgid "Select Stock Items" msgid "Show Installed Stock Items" msgstr "选择库存项" -#: common/models.py:1772 +#: common/models.py:1779 msgid "Display installed stock items in stock tables" msgstr "" -#: common/models.py:1777 +#: common/models.py:1784 msgid "Check BOM when installing items" msgstr "" -#: common/models.py:1779 +#: common/models.py:1786 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/models.py:1785 +#: common/models.py:1792 +msgid "Allow Out of Stock Transfer" +msgstr "" + +#: common/models.py:1794 +msgid "Allow stock items which are not in stock to be transferred between stock locations" +msgstr "" + +#: common/models.py:1800 msgid "Build Order Reference Pattern" msgstr "" -#: common/models.py:1787 +#: common/models.py:1802 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/models.py:1793 common/models.py:1821 common/models.py:1843 -#: common/models.py:1871 +#: common/models.py:1808 common/models.py:1836 common/models.py:1858 +#: common/models.py:1894 #, fuzzy #| msgid "Responsible" msgid "Require Responsible Owner" msgstr "责任人" -#: common/models.py:1794 common/models.py:1822 common/models.py:1844 -#: common/models.py:1872 +#: common/models.py:1809 common/models.py:1837 common/models.py:1859 +#: common/models.py:1895 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/models.py:1799 +#: common/models.py:1814 msgid "Block Until Tests Pass" msgstr "" -#: common/models.py:1801 +#: common/models.py:1816 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/models.py:1807 +#: common/models.py:1822 #, fuzzy #| msgid "Sales Orders" msgid "Enable Return Orders" msgstr "销售订单" -#: common/models.py:1808 +#: common/models.py:1823 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/models.py:1813 +#: common/models.py:1828 #, fuzzy #| msgid "Build Order Reference" msgid "Return Order Reference Pattern" msgstr "相关生产订单" -#: common/models.py:1815 +#: common/models.py:1830 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/models.py:1827 +#: common/models.py:1842 #, fuzzy #| msgid "Complete Build Order" msgid "Edit Completed Return Orders" msgstr "生产订单完成" -#: common/models.py:1829 +#: common/models.py:1844 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/models.py:1835 +#: common/models.py:1850 msgid "Sales Order Reference Pattern" msgstr "" -#: common/models.py:1837 +#: common/models.py:1852 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/models.py:1849 +#: common/models.py:1864 msgid "Sales Order Default Shipment" msgstr "" -#: common/models.py:1850 +#: common/models.py:1865 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/models.py:1855 +#: common/models.py:1870 msgid "Edit Completed Sales Orders" msgstr "" -#: common/models.py:1857 +#: common/models.py:1872 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/models.py:1863 +#: common/models.py:1878 +#, fuzzy +#| msgid "Build Order is incomplete" +msgid "Mark Shipped Orders as Complete" +msgstr "生产订单未完成" + +#: common/models.py:1880 +msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" +msgstr "" + +#: common/models.py:1886 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/models.py:1865 +#: common/models.py:1888 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/models.py:1877 +#: common/models.py:1900 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/models.py:1879 +#: common/models.py:1902 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/models.py:1885 +#: common/models.py:1908 #, fuzzy #| msgid "Create Purchase Order" msgid "Auto Complete Purchase Orders" msgstr "创建采购订单" -#: common/models.py:1887 +#: common/models.py:1910 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/models.py:1894 +#: common/models.py:1917 msgid "Enable password forgot" msgstr "" -#: common/models.py:1895 +#: common/models.py:1918 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/models.py:1900 +#: common/models.py:1923 msgid "Enable registration" msgstr "" -#: common/models.py:1901 +#: common/models.py:1924 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/models.py:1906 +#: common/models.py:1929 msgid "Enable SSO" msgstr "" -#: common/models.py:1907 +#: common/models.py:1930 msgid "Enable SSO on the login pages" msgstr "" -#: common/models.py:1912 +#: common/models.py:1935 msgid "Enable SSO registration" msgstr "" -#: common/models.py:1914 +#: common/models.py:1937 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/models.py:1920 +#: common/models.py:1943 msgid "Email required" msgstr "" -#: common/models.py:1921 +#: common/models.py:1944 msgid "Require user to supply mail on signup" msgstr "" -#: common/models.py:1926 +#: common/models.py:1949 msgid "Auto-fill SSO users" msgstr "" -#: common/models.py:1928 +#: common/models.py:1951 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/models.py:1934 +#: common/models.py:1957 msgid "Mail twice" msgstr "" -#: common/models.py:1935 +#: common/models.py:1958 msgid "On signup ask users twice for their mail" msgstr "" -#: common/models.py:1940 +#: common/models.py:1963 msgid "Password twice" msgstr "" -#: common/models.py:1941 +#: common/models.py:1964 msgid "On signup ask users twice for their password" msgstr "" -#: common/models.py:1946 +#: common/models.py:1969 msgid "Allowed domains" msgstr "" -#: common/models.py:1948 +#: common/models.py:1971 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/models.py:1954 +#: common/models.py:1977 msgid "Group on signup" msgstr "" -#: common/models.py:1955 +#: common/models.py:1978 msgid "Group to which new users are assigned on registration" msgstr "" -#: common/models.py:1960 +#: common/models.py:1983 msgid "Enforce MFA" msgstr "" -#: common/models.py:1961 +#: common/models.py:1984 msgid "Users must use multifactor security." msgstr "" -#: common/models.py:1966 +#: common/models.py:1989 msgid "Check plugins on startup" msgstr "" -#: common/models.py:1968 +#: common/models.py:1991 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/models.py:1976 +#: common/models.py:1999 msgid "Check for plugin updates" msgstr "" -#: common/models.py:1977 +#: common/models.py:2000 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/models.py:1983 +#: common/models.py:2006 msgid "Enable URL integration" msgstr "" -#: common/models.py:1984 +#: common/models.py:2007 msgid "Enable plugins to add URL routes" msgstr "" -#: common/models.py:1990 +#: common/models.py:2013 msgid "Enable navigation integration" msgstr "" -#: common/models.py:1991 +#: common/models.py:2014 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/models.py:1997 +#: common/models.py:2020 msgid "Enable app integration" msgstr "" -#: common/models.py:1998 +#: common/models.py:2021 msgid "Enable plugins to add apps" msgstr "" -#: common/models.py:2004 +#: common/models.py:2027 msgid "Enable schedule integration" msgstr "" -#: common/models.py:2005 +#: common/models.py:2028 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/models.py:2011 +#: common/models.py:2034 msgid "Enable event integration" msgstr "" -#: common/models.py:2012 +#: common/models.py:2035 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/models.py:2018 +#: common/models.py:2041 #, fuzzy #| msgid "Sales Orders" msgid "Enable project codes" msgstr "销售订单" -#: common/models.py:2019 +#: common/models.py:2042 msgid "Enable project codes for tracking projects" msgstr "" -#: common/models.py:2024 +#: common/models.py:2047 msgid "Stocktake Functionality" msgstr "" -#: common/models.py:2026 +#: common/models.py:2049 msgid "Enable stocktake functionality for recording stock levels and calculating stock value" msgstr "" -#: common/models.py:2032 +#: common/models.py:2055 #, fuzzy #| msgid "Exclude Location" msgid "Exclude External Locations" msgstr "排除地点" -#: common/models.py:2034 +#: common/models.py:2057 #, fuzzy #| msgid "Exclude stock items from this selected location" msgid "Exclude stock items in external locations from stocktake calculations" msgstr "从该选定的仓储地点排除库存项" -#: common/models.py:2040 +#: common/models.py:2063 msgid "Automatic Stocktake Period" msgstr "" -#: common/models.py:2042 +#: common/models.py:2065 msgid "Number of days between automatic stocktake recording (set to zero to disable)" msgstr "" -#: common/models.py:2048 +#: common/models.py:2071 msgid "Report Deletion Interval" msgstr "" -#: common/models.py:2050 +#: common/models.py:2073 msgid "Stocktake reports will be deleted after specified number of days" msgstr "" -#: common/models.py:2057 +#: common/models.py:2080 msgid "Display Users full names" msgstr "" -#: common/models.py:2058 +#: common/models.py:2081 msgid "Display Users full names instead of usernames" msgstr "" -#: common/models.py:2063 +#: common/models.py:2086 msgid "Enable Test Station Data" msgstr "" -#: common/models.py:2064 +#: common/models.py:2087 #, fuzzy #| msgid "Enable generation of test reports" msgid "Enable test station data collection for test results" msgstr "启用生成测试报表" -#: common/models.py:2076 common/models.py:2486 +#: common/models.py:2099 common/models.py:2509 msgid "Settings key (must be unique - case insensitive" msgstr "" -#: common/models.py:2119 +#: common/models.py:2142 #, fuzzy #| msgid "Build to allocate parts" msgid "Hide inactive parts" msgstr "生产以分配部件" -#: common/models.py:2121 +#: common/models.py:2144 msgid "Hide inactive parts in results displayed on the homepage" msgstr "" -#: common/models.py:2127 +#: common/models.py:2150 msgid "Show subscribed parts" msgstr "" -#: common/models.py:2128 +#: common/models.py:2151 msgid "Show subscribed parts on the homepage" msgstr "" -#: common/models.py:2133 +#: common/models.py:2156 msgid "Show subscribed categories" msgstr "" -#: common/models.py:2134 +#: common/models.py:2157 msgid "Show subscribed part categories on the homepage" msgstr "" -#: common/models.py:2139 +#: common/models.py:2162 msgid "Show latest parts" msgstr "显示最近商品" -#: common/models.py:2140 +#: common/models.py:2163 msgid "Show latest parts on the homepage" msgstr "在主页上显示最近商品" -#: common/models.py:2145 +#: common/models.py:2168 msgid "Show invalid BOMs" msgstr "" -#: common/models.py:2146 +#: common/models.py:2169 msgid "Show BOMs that await validation on the homepage" msgstr "" -#: common/models.py:2151 +#: common/models.py:2174 msgid "Show recent stock changes" msgstr "" -#: common/models.py:2152 +#: common/models.py:2175 msgid "Show recently changed stock items on the homepage" msgstr "" -#: common/models.py:2157 +#: common/models.py:2180 msgid "Show low stock" msgstr "" -#: common/models.py:2158 +#: common/models.py:2181 msgid "Show low stock items on the homepage" msgstr "" -#: common/models.py:2163 +#: common/models.py:2186 msgid "Show depleted stock" msgstr "" -#: common/models.py:2164 +#: common/models.py:2187 msgid "Show depleted stock items on the homepage" msgstr "" -#: common/models.py:2169 +#: common/models.py:2192 msgid "Show needed stock" msgstr "" -#: common/models.py:2170 +#: common/models.py:2193 msgid "Show stock items needed for builds on the homepage" msgstr "" -#: common/models.py:2175 +#: common/models.py:2198 msgid "Show expired stock" msgstr "" -#: common/models.py:2176 +#: common/models.py:2199 msgid "Show expired stock items on the homepage" msgstr "" -#: common/models.py:2181 +#: common/models.py:2204 msgid "Show stale stock" msgstr "" -#: common/models.py:2182 +#: common/models.py:2205 msgid "Show stale stock items on the homepage" msgstr "" -#: common/models.py:2187 +#: common/models.py:2210 msgid "Show pending builds" msgstr "" -#: common/models.py:2188 +#: common/models.py:2211 msgid "Show pending builds on the homepage" msgstr "" -#: common/models.py:2193 +#: common/models.py:2216 msgid "Show overdue builds" msgstr "显示逾期生产" -#: common/models.py:2194 +#: common/models.py:2217 msgid "Show overdue builds on the homepage" msgstr "在主页上显示逾期的生产" -#: common/models.py:2199 +#: common/models.py:2222 msgid "Show outstanding POs" msgstr "" -#: common/models.py:2200 +#: common/models.py:2223 msgid "Show outstanding POs on the homepage" msgstr "" -#: common/models.py:2205 +#: common/models.py:2228 msgid "Show overdue POs" msgstr "" -#: common/models.py:2206 +#: common/models.py:2229 msgid "Show overdue POs on the homepage" msgstr "" -#: common/models.py:2211 +#: common/models.py:2234 msgid "Show outstanding SOs" msgstr "" -#: common/models.py:2212 +#: common/models.py:2235 msgid "Show outstanding SOs on the homepage" msgstr "" -#: common/models.py:2217 +#: common/models.py:2240 msgid "Show overdue SOs" msgstr "" -#: common/models.py:2218 +#: common/models.py:2241 msgid "Show overdue SOs on the homepage" msgstr "" -#: common/models.py:2223 +#: common/models.py:2246 msgid "Show pending SO shipments" msgstr "" -#: common/models.py:2224 +#: common/models.py:2247 #, fuzzy #| msgid "Show latest parts on the homepage" msgid "Show pending SO shipments on the homepage" msgstr "在主页上显示最近商品" -#: common/models.py:2229 +#: common/models.py:2252 msgid "Show News" msgstr "" -#: common/models.py:2230 +#: common/models.py:2253 msgid "Show news on the homepage" msgstr "" -#: common/models.py:2235 +#: common/models.py:2258 msgid "Inline label display" msgstr "内嵌标签显示" -#: common/models.py:2237 +#: common/models.py:2260 msgid "Display PDF labels in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 标签,而不是以文件形式下载" -#: common/models.py:2243 +#: common/models.py:2266 msgid "Default label printer" msgstr "" -#: common/models.py:2245 +#: common/models.py:2268 msgid "Configure which label printer should be selected by default" msgstr "" -#: common/models.py:2251 +#: common/models.py:2274 msgid "Inline report display" msgstr "" -#: common/models.py:2253 +#: common/models.py:2276 msgid "Display PDF reports in the browser, instead of downloading as a file" msgstr "在浏览器中显示 PDF 报告,而不是以文件形式下载" -#: common/models.py:2259 +#: common/models.py:2282 msgid "Search Parts" msgstr "" -#: common/models.py:2260 +#: common/models.py:2283 msgid "Display parts in search preview window" msgstr "" -#: common/models.py:2265 +#: common/models.py:2288 msgid "Search Supplier Parts" msgstr "" -#: common/models.py:2266 +#: common/models.py:2289 msgid "Display supplier parts in search preview window" msgstr "" -#: common/models.py:2271 +#: common/models.py:2294 msgid "Search Manufacturer Parts" msgstr "" -#: common/models.py:2272 +#: common/models.py:2295 msgid "Display manufacturer parts in search preview window" msgstr "" -#: common/models.py:2277 +#: common/models.py:2300 msgid "Hide Inactive Parts" msgstr "" -#: common/models.py:2278 +#: common/models.py:2301 msgid "Excluded inactive parts from search preview window" msgstr "" -#: common/models.py:2283 +#: common/models.py:2306 msgid "Search Categories" msgstr "" -#: common/models.py:2284 +#: common/models.py:2307 msgid "Display part categories in search preview window" msgstr "" -#: common/models.py:2289 +#: common/models.py:2312 msgid "Search Stock" msgstr "" -#: common/models.py:2290 +#: common/models.py:2313 msgid "Display stock items in search preview window" msgstr "" -#: common/models.py:2295 +#: common/models.py:2318 msgid "Hide Unavailable Stock Items" msgstr "" -#: common/models.py:2297 +#: common/models.py:2320 msgid "Exclude stock items which are not available from the search preview window" msgstr "" -#: common/models.py:2303 +#: common/models.py:2326 msgid "Search Locations" msgstr "" -#: common/models.py:2304 +#: common/models.py:2327 msgid "Display stock locations in search preview window" msgstr "" -#: common/models.py:2309 +#: common/models.py:2332 msgid "Search Companies" msgstr "" -#: common/models.py:2310 +#: common/models.py:2333 msgid "Display companies in search preview window" msgstr "" -#: common/models.py:2315 +#: common/models.py:2338 msgid "Search Build Orders" msgstr "" -#: common/models.py:2316 +#: common/models.py:2339 msgid "Display build orders in search preview window" msgstr "" -#: common/models.py:2321 +#: common/models.py:2344 msgid "Search Purchase Orders" msgstr "" -#: common/models.py:2322 +#: common/models.py:2345 msgid "Display purchase orders in search preview window" msgstr "" -#: common/models.py:2327 +#: common/models.py:2350 msgid "Exclude Inactive Purchase Orders" msgstr "" -#: common/models.py:2329 +#: common/models.py:2352 msgid "Exclude inactive purchase orders from search preview window" msgstr "" -#: common/models.py:2335 +#: common/models.py:2358 msgid "Search Sales Orders" msgstr "" -#: common/models.py:2336 +#: common/models.py:2359 msgid "Display sales orders in search preview window" msgstr "" -#: common/models.py:2341 +#: common/models.py:2364 msgid "Exclude Inactive Sales Orders" msgstr "" -#: common/models.py:2343 +#: common/models.py:2366 msgid "Exclude inactive sales orders from search preview window" msgstr "" -#: common/models.py:2349 +#: common/models.py:2372 #, fuzzy #| msgid "Purchase Orders" msgid "Search Return Orders" msgstr "采购订单" -#: common/models.py:2350 +#: common/models.py:2373 msgid "Display return orders in search preview window" msgstr "" -#: common/models.py:2355 +#: common/models.py:2378 msgid "Exclude Inactive Return Orders" msgstr "" -#: common/models.py:2357 +#: common/models.py:2380 msgid "Exclude inactive return orders from search preview window" msgstr "" -#: common/models.py:2363 +#: common/models.py:2386 msgid "Search Preview Results" msgstr "搜索预览结果" -#: common/models.py:2365 +#: common/models.py:2388 msgid "Number of results to show in each section of the search preview window" msgstr "" -#: common/models.py:2371 +#: common/models.py:2394 #, fuzzy #| msgid "Search" msgid "Regex Search" msgstr "搜索" -#: common/models.py:2372 +#: common/models.py:2395 msgid "Enable regular expressions in search queries" msgstr "" -#: common/models.py:2377 +#: common/models.py:2400 msgid "Whole Word Search" msgstr "" -#: common/models.py:2378 +#: common/models.py:2401 msgid "Search queries return results for whole word matches" msgstr "" -#: common/models.py:2383 +#: common/models.py:2406 msgid "Show Quantity in Forms" msgstr "在表格中显示数量" -#: common/models.py:2384 +#: common/models.py:2407 msgid "Display available part quantity in some forms" msgstr "在某些表格中显示可用的商品数量" -#: common/models.py:2389 +#: common/models.py:2412 msgid "Escape Key Closes Forms" msgstr "" -#: common/models.py:2390 +#: common/models.py:2413 msgid "Use the escape key to close modal forms" msgstr "" -#: common/models.py:2395 +#: common/models.py:2418 msgid "Fixed Navbar" msgstr "" -#: common/models.py:2396 +#: common/models.py:2419 msgid "The navbar position is fixed to the top of the screen" msgstr "" -#: common/models.py:2401 +#: common/models.py:2424 msgid "Date Format" msgstr "" -#: common/models.py:2402 +#: common/models.py:2425 msgid "Preferred format for displaying dates" msgstr "" -#: common/models.py:2415 part/templates/part/detail.html:41 +#: common/models.py:2438 part/templates/part/detail.html:41 msgid "Part Scheduling" msgstr "" -#: common/models.py:2416 +#: common/models.py:2439 msgid "Display part scheduling information" msgstr "" -#: common/models.py:2421 part/templates/part/detail.html:62 +#: common/models.py:2444 part/templates/part/detail.html:62 msgid "Part Stocktake" msgstr "" -#: common/models.py:2423 +#: common/models.py:2446 msgid "Display part stocktake information (if stocktake functionality is enabled)" msgstr "" -#: common/models.py:2429 +#: common/models.py:2452 msgid "Table String Length" msgstr "" -#: common/models.py:2431 +#: common/models.py:2454 msgid "Maximum length limit for strings displayed in table views" msgstr "" -#: common/models.py:2437 +#: common/models.py:2460 #, fuzzy #| msgid "Select Label Template" msgid "Default part label template" msgstr "选择标签模板" -#: common/models.py:2438 +#: common/models.py:2461 msgid "The part label template to be automatically selected" msgstr "" -#: common/models.py:2443 +#: common/models.py:2466 #, fuzzy #| msgid "stock items selected" msgid "Default stock item template" msgstr "已选择库存项" -#: common/models.py:2445 +#: common/models.py:2468 msgid "The stock item label template to be automatically selected" msgstr "" -#: common/models.py:2451 +#: common/models.py:2474 #, fuzzy #| msgid "No stock location set" msgid "Default stock location label template" msgstr "未设置仓储地点" -#: common/models.py:2453 +#: common/models.py:2476 msgid "The stock location label template to be automatically selected" msgstr "" -#: common/models.py:2459 +#: common/models.py:2482 #, fuzzy #| msgid "No stock location set" msgid "Default build line label template" msgstr "未设置仓储地点" -#: common/models.py:2461 +#: common/models.py:2484 msgid "The build line label template to be automatically selected" msgstr "" -#: common/models.py:2467 +#: common/models.py:2490 msgid "Receive error reports" msgstr "" -#: common/models.py:2468 +#: common/models.py:2491 msgid "Receive notifications for system errors" msgstr "" -#: common/models.py:2473 +#: common/models.py:2496 msgid "Last used printing machines" msgstr "" -#: common/models.py:2474 +#: common/models.py:2497 msgid "Save the last used printing machines for a user" msgstr "" -#: common/models.py:2517 +#: common/models.py:2540 msgid "Price break quantity" msgstr "" -#: common/models.py:2524 company/serializers.py:496 order/admin.py:42 -#: order/models.py:1333 order/models.py:2241 +#: common/models.py:2547 company/serializers.py:496 order/admin.py:42 +#: order/models.py:1382 order/models.py:2301 #: templates/js/translated/company.js:1823 templates/js/translated/part.js:1885 #: templates/js/translated/pricing.js:621 -#: templates/js/translated/return_order.js:741 +#: templates/js/translated/return_order.js:740 msgid "Price" msgstr "价格" -#: common/models.py:2525 +#: common/models.py:2548 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:2696 common/models.py:2881 +#: common/models.py:2719 common/models.py:2904 msgid "Endpoint" msgstr "" -#: common/models.py:2697 +#: common/models.py:2720 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:2707 +#: common/models.py:2730 msgid "Name for this webhook" msgstr "" -#: common/models.py:2711 company/models.py:160 company/models.py:813 -#: machine/models.py:39 part/admin.py:88 part/models.py:1045 -#: plugin/models.py:56 templates/js/translated/company.js:523 +#: common/models.py:2734 company/models.py:160 company/models.py:814 +#: machine/models.py:39 part/admin.py:88 part/models.py:1088 +#: plugin/models.py:65 templates/js/translated/company.js:523 #: templates/js/translated/table_filters.js:135 #: templates/js/translated/table_filters.js:219 #: templates/js/translated/table_filters.js:492 @@ -3726,145 +3600,145 @@ msgstr "" msgid "Active" msgstr "" -#: common/models.py:2711 +#: common/models.py:2734 msgid "Is this webhook active" msgstr "" -#: common/models.py:2727 users/models.py:159 +#: common/models.py:2750 users/models.py:159 msgid "Token" msgstr "令牌" -#: common/models.py:2728 +#: common/models.py:2751 msgid "Token for access" msgstr "" -#: common/models.py:2736 +#: common/models.py:2759 msgid "Secret" msgstr "" -#: common/models.py:2737 +#: common/models.py:2760 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:2845 +#: common/models.py:2868 msgid "Message ID" msgstr "" -#: common/models.py:2846 +#: common/models.py:2869 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:2854 +#: common/models.py:2877 msgid "Host" msgstr "" -#: common/models.py:2855 +#: common/models.py:2878 msgid "Host from which this message was received" msgstr "" -#: common/models.py:2863 +#: common/models.py:2886 msgid "Header" msgstr "" -#: common/models.py:2864 +#: common/models.py:2887 msgid "Header of this message" msgstr "" -#: common/models.py:2871 +#: common/models.py:2894 msgid "Body" msgstr "" -#: common/models.py:2872 +#: common/models.py:2895 msgid "Body of this message" msgstr "" -#: common/models.py:2882 +#: common/models.py:2905 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:2887 +#: common/models.py:2910 msgid "Worked on" msgstr "" -#: common/models.py:2888 +#: common/models.py:2911 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:3014 +#: common/models.py:3037 msgid "Id" msgstr "" -#: common/models.py:3016 templates/js/translated/company.js:965 +#: common/models.py:3039 templates/js/translated/company.js:965 #: templates/js/translated/news.js:44 msgid "Title" msgstr "" -#: common/models.py:3020 templates/js/translated/news.js:60 +#: common/models.py:3043 templates/js/translated/news.js:60 msgid "Published" msgstr "" -#: common/models.py:3022 templates/InvenTree/settings/plugin_settings.html:32 +#: common/models.py:3045 templates/InvenTree/settings/plugin_settings.html:32 #: templates/js/translated/news.js:56 templates/js/translated/plugin.js:103 msgid "Author" msgstr "" -#: common/models.py:3024 templates/js/translated/news.js:52 +#: common/models.py:3047 templates/js/translated/news.js:52 msgid "Summary" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Read" msgstr "" -#: common/models.py:3027 +#: common/models.py:3050 msgid "Was this news item read?" msgstr "" -#: common/models.py:3044 company/models.py:156 part/models.py:929 +#: common/models.py:3067 company/models.py:156 part/models.py:972 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 -#: report/templates/report/inventree_return_order_report_base.html:35 +#: report/templates/report/inventree_return_order_report.html:35 #: stock/templates/stock/item_base.html:133 templates/503.html:31 #: templates/hover_image.html:7 templates/hover_image.html:9 #: templates/modals.html:6 msgid "Image" msgstr "图片" -#: common/models.py:3044 +#: common/models.py:3067 #, fuzzy #| msgid "Image" msgid "Image file" msgstr "图片" -#: common/models.py:3086 +#: common/models.py:3109 #, fuzzy #| msgid "Must be a valid number" msgid "Unit name must be a valid identifier" msgstr "必须是有效数字" -#: common/models.py:3105 +#: common/models.py:3128 #, fuzzy #| msgid "Part name" msgid "Unit name" msgstr "商品名称" -#: common/models.py:3112 templates/InvenTree/settings/settings_staff_js.html:75 +#: common/models.py:3135 templates/InvenTree/settings/settings_staff_js.html:75 msgid "Symbol" msgstr "" -#: common/models.py:3113 +#: common/models.py:3136 #, fuzzy #| msgid "Optional Items" msgid "Optional unit symbol" msgstr "可选项目" -#: common/models.py:3120 templates/InvenTree/settings/settings_staff_js.html:71 +#: common/models.py:3143 templates/InvenTree/settings/settings_staff_js.html:71 #, fuzzy #| msgid "Destination" msgid "Definition" msgstr "目的地" -#: common/models.py:3121 +#: common/models.py:3144 msgid "Unit definition" msgstr "" @@ -3886,7 +3760,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:330 common/notifications.py:337 order/api.py:468 +#: common/notifications.py:330 common/notifications.py:337 order/api.py:472 msgid "Items Received" msgstr "" @@ -3904,77 +3778,77 @@ msgstr "收到定购单" msgid "Error raised by plugin" msgstr "" -#: common/serializers.py:333 +#: common/serializers.py:366 msgid "Is Running" msgstr "" -#: common/serializers.py:339 +#: common/serializers.py:372 #, fuzzy #| msgid "Pending" msgid "Pending Tasks" msgstr "待定" -#: common/serializers.py:345 +#: common/serializers.py:378 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:351 +#: common/serializers.py:384 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Task ID" msgstr "" -#: common/serializers.py:366 +#: common/serializers.py:399 msgid "Unique task ID" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 msgid "Lock" msgstr "" -#: common/serializers.py:368 +#: common/serializers.py:401 #, fuzzy #| msgid "Stock Item" msgid "Lock time" msgstr "库存项" -#: common/serializers.py:370 +#: common/serializers.py:403 #, fuzzy #| msgid "Part name" msgid "Task name" msgstr "商品名称" -#: common/serializers.py:372 +#: common/serializers.py:405 #, fuzzy #| msgid "Production" msgid "Function" msgstr "生产中" -#: common/serializers.py:372 +#: common/serializers.py:405 #, fuzzy #| msgid "Part name" msgid "Function name" msgstr "商品名称" -#: common/serializers.py:374 +#: common/serializers.py:407 #, fuzzy #| msgid "Attachments" msgid "Arguments" msgstr "附件" -#: common/serializers.py:374 +#: common/serializers.py:407 msgid "Task arguments" msgstr "" -#: common/serializers.py:377 +#: common/serializers.py:410 #, fuzzy #| msgid "Keywords" msgid "Keyword Arguments" msgstr "关键词" -#: common/serializers.py:377 +#: common/serializers.py:410 msgid "Task keyword arguments" msgstr "" @@ -4077,9 +3951,9 @@ msgid "Contact email address" msgstr "联系人电子邮件" #: company/models.py:139 company/templates/company/company_base.html:145 -#: order/models.py:331 order/templates/order/order_base.html:203 +#: order/models.py:343 order/templates/order/order_base.html:203 #: order/templates/order/return_order_base.html:174 -#: order/templates/order/sales_order_base.html:214 +#: order/templates/order/sales_order_base.html:218 msgid "Contact" msgstr "联系人" @@ -4127,7 +4001,7 @@ msgstr "该公司使用的默认货币" #: company/models.py:273 company/models.py:382 #: company/templates/company/company_base.html:8 -#: company/templates/company/company_base.html:12 stock/api.py:776 +#: company/templates/company/company_base.html:12 stock/api.py:812 #: templates/InvenTree/search.html:178 templates/js/translated/company.js:496 msgid "Company" msgstr "公司" @@ -4237,19 +4111,19 @@ msgstr "" msgid "Link to address information (external)" msgstr "描述 (可选)" -#: company/models.py:489 company/models.py:791 stock/models.py:751 -#: stock/serializers.py:266 stock/templates/stock/item_base.html:142 +#: company/models.py:489 company/models.py:792 stock/models.py:768 +#: stock/serializers.py:395 stock/templates/stock/item_base.html:142 #: templates/js/translated/bom.js:622 msgid "Base Part" msgstr "" -#: company/models.py:491 company/models.py:793 +#: company/models.py:491 company/models.py:794 msgid "Select part" msgstr "选择商品" #: company/models.py:500 company/templates/company/company_base.html:82 #: company/templates/company/manufacturer_part.html:90 -#: company/templates/company/supplier_part.html:145 part/serializers.py:515 +#: company/templates/company/supplier_part.html:145 part/serializers.py:530 #: stock/templates/stock/item_base.html:207 #: templates/js/translated/company.js:507 #: templates/js/translated/company.js:1118 @@ -4264,13 +4138,13 @@ msgid "Select manufacturer" msgstr "选择制造商" #: company/models.py:507 company/templates/company/manufacturer_part.html:101 -#: company/templates/company/supplier_part.html:153 part/serializers.py:525 +#: company/templates/company/supplier_part.html:153 part/serializers.py:540 #: templates/js/translated/company.js:351 #: templates/js/translated/company.js:1117 #: templates/js/translated/company.js:1312 #: templates/js/translated/company.js:1630 templates/js/translated/part.js:1800 -#: templates/js/translated/purchase_order.js:1852 -#: templates/js/translated/purchase_order.js:2054 +#: templates/js/translated/purchase_order.js:1851 +#: templates/js/translated/purchase_order.js:2053 msgid "MPN" msgstr "" @@ -4282,63 +4156,62 @@ msgstr "制造商商品编号" msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:523 +#: company/models.py:524 msgid "Manufacturer part description" msgstr "制造商商品描述" -#: company/models.py:580 company/models.py:607 company/models.py:823 +#: company/models.py:581 company/models.py:608 company/models.py:824 #: company/templates/company/manufacturer_part.html:7 #: company/templates/company/manufacturer_part.html:24 #: stock/templates/stock/item_base.html:217 msgid "Manufacturer Part" msgstr "制造商商品" -#: company/models.py:614 +#: company/models.py:615 msgid "Parameter name" msgstr "参数名称" -#: company/models.py:620 -#: report/templates/report/inventree_test_report_base.html:104 -#: stock/models.py:2436 templates/js/translated/company.js:1166 +#: company/models.py:621 report/templates/report/inventree_test_report.html:104 +#: stock/models.py:2429 templates/js/translated/company.js:1166 #: templates/js/translated/company.js:1419 templates/js/translated/part.js:1492 -#: templates/js/translated/stock.js:1519 +#: templates/js/translated/stock.js:1522 msgid "Value" msgstr "数值" -#: company/models.py:621 +#: company/models.py:622 msgid "Parameter value" msgstr "参数值" -#: company/models.py:628 company/templates/company/supplier_part.html:168 -#: part/admin.py:57 part/models.py:1009 part/models.py:3623 +#: company/models.py:629 company/templates/company/supplier_part.html:168 +#: part/admin.py:57 part/models.py:1052 part/models.py:3666 #: part/templates/part/part_base.html:284 #: templates/js/translated/company.js:1425 templates/js/translated/part.js:1511 -#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2370 +#: templates/js/translated/part.js:1615 templates/js/translated/part.js:2369 msgid "Units" msgstr "单位" -#: company/models.py:629 +#: company/models.py:630 msgid "Parameter units" msgstr "参数单位" -#: company/models.py:731 +#: company/models.py:732 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:738 +#: company/models.py:739 #, fuzzy #| msgid "Quantity must be greater than zero" msgid "Pack units must be greater than zero" msgstr "数量必须大于0" -#: company/models.py:752 +#: company/models.py:753 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:801 company/templates/company/company_base.html:87 -#: company/templates/company/supplier_part.html:129 order/models.py:465 +#: company/models.py:802 company/templates/company/company_base.html:87 +#: company/templates/company/supplier_part.html:129 order/models.py:486 #: order/templates/order/order_base.html:136 part/bom.py:272 part/bom.py:310 -#: part/serializers.py:499 plugin/builtin/suppliers/digikey.py:25 +#: part/serializers.py:514 plugin/builtin/suppliers/digikey.py:25 #: plugin/builtin/suppliers/lcsc.py:26 plugin/builtin/suppliers/mouser.py:24 #: plugin/builtin/suppliers/tme.py:26 stock/templates/stock/item_base.html:224 #: templates/email/overdue_purchase_order.html:16 @@ -4346,99 +4219,99 @@ msgstr "" #: templates/js/translated/company.js:511 #: templates/js/translated/company.js:1584 templates/js/translated/part.js:1768 #: templates/js/translated/pricing.js:498 -#: templates/js/translated/purchase_order.js:1690 +#: templates/js/translated/purchase_order.js:1689 #: templates/js/translated/table_filters.js:804 msgid "Supplier" msgstr "供应商" -#: company/models.py:802 +#: company/models.py:803 msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:808 part/serializers.py:510 +#: company/models.py:809 part/serializers.py:525 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:814 +#: company/models.py:815 #, fuzzy #| msgid "Delete supplier part" msgid "Is this supplier part active?" msgstr "删除供应商商品" -#: company/models.py:824 +#: company/models.py:825 msgid "Select manufacturer part" msgstr "选择制造商商品" -#: company/models.py:831 +#: company/models.py:832 msgid "URL for external supplier part link" msgstr "外部供货商商品链接URL" -#: company/models.py:839 +#: company/models.py:841 msgid "Supplier part description" msgstr "供应商商品描述" -#: company/models.py:846 company/templates/company/supplier_part.html:187 -#: part/admin.py:418 part/models.py:4070 part/templates/part/upload_bom.html:59 +#: company/models.py:848 company/templates/company/supplier_part.html:187 +#: part/admin.py:420 part/models.py:4113 part/templates/part/upload_bom.html:59 #: report/templates/report/inventree_bill_of_materials_report.html:140 -#: report/templates/report/inventree_po_report_base.html:32 -#: report/templates/report/inventree_return_order_report_base.html:27 -#: report/templates/report/inventree_slr_report.html:105 -#: report/templates/report/inventree_so_report_base.html:32 -#: stock/serializers.py:579 +#: report/templates/report/inventree_purchase_order_report.html:32 +#: 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:708 msgid "Note" msgstr "备注" -#: company/models.py:855 part/models.py:1967 +#: company/models.py:857 part/models.py:2010 msgid "base cost" msgstr "" -#: company/models.py:856 part/models.py:1968 +#: company/models.py:858 part/models.py:2011 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低收费(例如库存费)" -#: company/models.py:863 company/templates/company/supplier_part.html:160 -#: stock/admin.py:224 stock/models.py:782 stock/serializers.py:1350 +#: company/models.py:865 company/templates/company/supplier_part.html:160 +#: stock/admin.py:224 stock/models.py:799 stock/serializers.py:1479 #: stock/templates/stock/item_base.html:240 #: templates/js/translated/company.js:1646 -#: templates/js/translated/stock.js:2423 +#: templates/js/translated/stock.js:2424 msgid "Packaging" msgstr "打包" -#: company/models.py:864 +#: company/models.py:866 msgid "Part packaging" msgstr "商品打包" -#: company/models.py:869 templates/js/translated/company.js:1651 +#: company/models.py:871 templates/js/translated/company.js:1651 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 #: templates/js/translated/purchase_order.js:311 #: templates/js/translated/purchase_order.js:841 #: templates/js/translated/purchase_order.js:1103 -#: templates/js/translated/purchase_order.js:2085 -#: templates/js/translated/purchase_order.js:2102 +#: templates/js/translated/purchase_order.js:2084 +#: templates/js/translated/purchase_order.js:2101 msgid "Pack Quantity" msgstr "" -#: company/models.py:871 +#: company/models.py:873 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:890 part/models.py:1974 +#: company/models.py:892 part/models.py:2017 msgid "multiple" msgstr "" -#: company/models.py:891 +#: company/models.py:893 msgid "Order multiple" msgstr "" -#: company/models.py:903 +#: company/models.py:905 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:909 +#: company/models.py:911 msgid "Availability Updated" msgstr "" -#: company/models.py:910 +#: company/models.py:912 msgid "Date of last update of availability data" msgstr "" @@ -4457,7 +4330,7 @@ msgstr "" #: part/templates/part/part_base.html:146 #: templates/js/translated/company.js:1287 #: templates/js/translated/company.js:1575 -#: templates/js/translated/model_renderers.js:306 +#: templates/js/translated/model_renderers.js:312 #: templates/js/translated/part.js:814 templates/js/translated/part.js:1218 msgid "Inactive" msgstr "" @@ -4493,11 +4366,11 @@ msgstr "删除该公司" #: company/templates/company/manufacturer_part.html:51 #: company/templates/company/supplier_part.html:83 #: part/templates/part/part_thumb.html:20 -#: report/templates/report/inventree_build_order_base.html:98 -#: report/templates/report/inventree_po_report_base.html:40 -#: report/templates/report/inventree_so_report_base.html:40 -#: report/templates/report/inventree_test_report_base.html:84 -#: report/templates/report/inventree_test_report_base.html:163 +#: report/templates/report/inventree_build_order_report.html:98 +#: report/templates/report/inventree_purchase_order_report.html:40 +#: report/templates/report/inventree_sales_order_report.html:40 +#: report/templates/report/inventree_test_report.html:84 +#: report/templates/report/inventree_test_report.html:163 #, fuzzy #| msgid "Part name" msgid "Part image" @@ -4518,15 +4391,15 @@ msgstr "从 URL 下载图片" msgid "Delete image" msgstr "" -#: company/templates/company/company_base.html:92 order/models.py:910 -#: order/models.py:2008 order/templates/order/return_order_base.html:131 -#: order/templates/order/sales_order_base.html:144 stock/models.py:804 -#: stock/models.py:805 stock/serializers.py:1100 +#: company/templates/company/company_base.html:92 order/models.py:940 +#: order/models.py:2068 order/templates/order/return_order_base.html:131 +#: order/templates/order/sales_order_base.html:148 stock/models.py:821 +#: stock/models.py:822 stock/serializers.py:1229 #: stock/templates/stock/item_base.html:405 #: templates/email/overdue_sales_order.html:16 #: templates/js/translated/company.js:503 -#: templates/js/translated/return_order.js:296 -#: templates/js/translated/sales_order.js:784 +#: templates/js/translated/return_order.js:295 +#: templates/js/translated/sales_order.js:820 #: templates/js/translated/stock.js:2959 #: templates/js/translated/table_filters.js:808 msgid "Customer" @@ -4536,10 +4409,10 @@ msgstr "客户" msgid "Uses default currency" msgstr "使用默认货币" -#: company/templates/company/company_base.html:124 order/models.py:341 +#: company/templates/company/company_base.html:124 order/models.py:353 #: order/templates/order/order_base.html:210 #: order/templates/order/return_order_base.html:181 -#: order/templates/order/sales_order_base.html:221 +#: order/templates/order/sales_order_base.html:225 msgid "Address" msgstr "地址" @@ -4548,7 +4421,7 @@ msgid "Phone" msgstr "电话" #: company/templates/company/company_base.html:211 -#: part/templates/part/part_base.html:528 +#: part/templates/part/part_base.html:527 msgid "Remove Image" msgstr "" @@ -4557,19 +4430,19 @@ msgid "Remove associated image from this company" msgstr "" #: company/templates/company/company_base.html:214 -#: part/templates/part/part_base.html:531 +#: part/templates/part/part_base.html:530 #: templates/InvenTree/settings/user.html:88 #: templates/InvenTree/settings/user_sso.html:43 msgid "Remove" msgstr "" #: company/templates/company/company_base.html:243 -#: part/templates/part/part_base.html:560 +#: part/templates/part/part_base.html:559 msgid "Upload Image" msgstr "上传图片" #: company/templates/company/company_base.html:258 -#: part/templates/part/part_base.html:614 +#: part/templates/part/part_base.html:613 msgid "Download Image" msgstr "下载图片" @@ -4736,7 +4609,7 @@ msgid "Delete manufacturer part" msgstr "删除生产商商品" #: company/templates/company/manufacturer_part.html:65 -#: company/templates/company/supplier_part.html:97 order/api.py:454 +#: company/templates/company/supplier_part.html:97 order/api.py:458 msgid "Internal Part" msgstr "内部商品" @@ -4746,7 +4619,7 @@ msgstr "" #: company/templates/company/manufacturer_part.html:119 #: company/templates/company/supplier_part.html:15 company/views.py:31 -#: part/admin.py:122 part/serializers.py:821 +#: part/admin.py:122 part/serializers.py:836 #: part/templates/part/part_sidebar.html:33 templates/InvenTree/search.html:190 #: templates/navbar.html:48 msgid "Suppliers" @@ -4800,11 +4673,11 @@ msgid "Addresses" msgstr "地址" #: company/templates/company/supplier_part.html:7 -#: company/templates/company/supplier_part.html:24 order/api.py:448 -#: stock/models.py:762 stock/templates/stock/item_base.html:233 +#: company/templates/company/supplier_part.html:24 order/api.py:452 +#: stock/models.py:779 stock/templates/stock/item_base.html:233 #: templates/js/translated/company.js:1600 #: templates/js/translated/purchase_order.js:752 -#: templates/js/translated/stock.js:2279 +#: templates/js/translated/stock.js:2280 msgid "Supplier Part" msgstr "供应商商品" @@ -4850,11 +4723,11 @@ msgid "No supplier information available" msgstr "" #: company/templates/company/supplier_part.html:139 part/bom.py:279 -#: part/bom.py:311 part/serializers.py:509 +#: part/bom.py:311 part/serializers.py:524 #: templates/js/translated/company.js:349 templates/js/translated/part.js:1786 #: templates/js/translated/pricing.js:510 -#: templates/js/translated/purchase_order.js:1851 -#: templates/js/translated/purchase_order.js:2029 +#: templates/js/translated/purchase_order.js:1850 +#: templates/js/translated/purchase_order.js:2028 msgid "SKU" msgstr "" @@ -4863,12 +4736,12 @@ msgid "Supplier Part Stock" msgstr "供货商商品库存" #: company/templates/company/supplier_part.html:209 -#: part/templates/part/detail.html:24 stock/templates/stock/location.html:199 +#: part/templates/part/detail.html:24 stock/templates/stock/location.html:206 msgid "Create new stock item" msgstr "" #: company/templates/company/supplier_part.html:210 -#: part/templates/part/detail.html:25 stock/templates/stock/location.html:200 +#: part/templates/part/detail.html:25 stock/templates/stock/location.html:207 #: templates/js/translated/stock.js:537 msgid "New Stock Item" msgstr "" @@ -4900,13 +4773,13 @@ msgid "Update Part Availability" msgstr "" #: company/templates/company/supplier_part_sidebar.html:5 -#: part/serializers.py:820 part/stocktake.py:223 +#: part/serializers.py:835 part/stocktake.py:223 #: part/templates/part/category.html:183 #: part/templates/part/category_sidebar.html:17 stock/admin.py:69 -#: stock/serializers.py:787 stock/serializers.py:951 +#: stock/serializers.py:916 stock/serializers.py:1080 #: stock/templates/stock/location.html:170 -#: stock/templates/stock/location.html:184 -#: stock/templates/stock/location.html:196 +#: stock/templates/stock/location.html:191 +#: stock/templates/stock/location.html:203 #: stock/templates/stock/location_sidebar.html:7 #: templates/InvenTree/search.html:155 templates/js/translated/part.js:1060 #: templates/js/translated/search.js:172 templates/js/translated/stock.js:2766 @@ -4943,146 +4816,66 @@ msgstr "公司" msgid "New Company" msgstr "新建公司信息" -#: label/api.py:247 -#, fuzzy -#| msgid "Error renaming file" -msgid "Error printing label" -msgstr "重命名文件出错" +#: generic/states/tests.py:18 order/status_codes.py:13 +msgid "Placed" +msgstr "已添加" -#: label/models.py:120 -msgid "Label name" -msgstr "标签名称" - -#: label/models.py:128 -msgid "Label description" -msgstr "标签说明" - -#: label/models.py:136 -msgid "Label" -msgstr "标签" - -#: label/models.py:137 -msgid "Label template file" -msgstr "标签模板文件" - -#: label/models.py:143 part/models.py:3494 report/models.py:324 -#: templates/js/translated/part.js:2900 -#: templates/js/translated/table_filters.js:481 -msgid "Enabled" -msgstr "已启用" - -#: label/models.py:144 -msgid "Label template is enabled" -msgstr "标签模板已启用" - -#: label/models.py:149 -msgid "Width [mm]" -msgstr "宽度 [mm]" - -#: label/models.py:150 -msgid "Label width, specified in mm" -msgstr "标注宽度,以毫米为单位。" - -#: label/models.py:156 -msgid "Height [mm]" -msgstr "高度 [mm]" - -#: label/models.py:157 -msgid "Label height, specified in mm" -msgstr "标注高度,以毫米为单位。" - -#: label/models.py:163 report/models.py:317 -msgid "Filename Pattern" -msgstr "文件名样式" - -#: label/models.py:164 -msgid "Pattern for generating label filenames" -msgstr "" - -#: label/models.py:313 label/models.py:352 label/models.py:377 -#: label/models.py:412 -#, fuzzy -#| msgid "Query filters (comma-separated list of key=value pairs)," -msgid "Query filters (comma-separated list of key=value pairs)" -msgstr "查询筛选器 (逗号分隔的键值对列表)" - -#: label/models.py:314 label/models.py:353 label/models.py:378 -#: label/models.py:413 report/models.py:345 report/models.py:496 -#: report/models.py:532 report/models.py:568 report/models.py:750 -msgid "Filters" -msgstr "筛选器" - -#: label/templates/label/part/part_label.html:31 -#: label/templates/label/stockitem/qr.html:21 -#: label/templates/label/stocklocation/qr.html:20 -#: templates/allauth_2fa/setup.html:18 -#, fuzzy -#| msgid "Part QR Code" -msgid "QR Code" -msgstr "商品二维码" - -#: label/templates/label/part/part_label_code128.html:31 -#: label/templates/label/stocklocation/qr_and_text.html:31 -#: templates/qr_code.html:7 -msgid "QR code" -msgstr "" - -#: machine/machine_types/label_printer.py:217 +#: machine/machine_types/label_printer.py:218 msgid "Copies" msgstr "" -#: machine/machine_types/label_printer.py:218 +#: machine/machine_types/label_printer.py:219 #, fuzzy #| msgid "Number of stock items to build" msgid "Number of copies to print for each label" msgstr "要生产的项目数量" -#: machine/machine_types/label_printer.py:233 +#: machine/machine_types/label_printer.py:234 #, fuzzy #| msgid "Connection error" msgid "Connected" msgstr "连接错误" -#: machine/machine_types/label_printer.py:234 order/api.py:1511 -#: templates/js/translated/sales_order.js:1042 +#: machine/machine_types/label_printer.py:235 order/api.py:1515 +#: templates/js/translated/sales_order.js:1078 msgid "Unknown" msgstr "" -#: machine/machine_types/label_printer.py:235 +#: machine/machine_types/label_printer.py:236 #, fuzzy #| msgid "Print Label" msgid "Printing" msgstr "打印标签" -#: machine/machine_types/label_printer.py:236 +#: machine/machine_types/label_printer.py:237 msgid "No media" msgstr "" -#: machine/machine_types/label_printer.py:237 +#: machine/machine_types/label_printer.py:238 #, fuzzy #| msgid "Rejected" msgid "Disconnected" msgstr "已拒绝" -#: machine/machine_types/label_printer.py:244 +#: machine/machine_types/label_printer.py:245 #, fuzzy #| msgid "Label name" msgid "Label Printer" msgstr "标签名称" -#: machine/machine_types/label_printer.py:245 +#: machine/machine_types/label_printer.py:246 #, fuzzy #| msgid "Allocate selected items" msgid "Directly print labels for various items." msgstr "分配选定项目" -#: machine/machine_types/label_printer.py:251 +#: machine/machine_types/label_printer.py:252 #, fuzzy #| msgid "Print actions" msgid "Printer Location" msgstr "打印操作" -#: machine/machine_types/label_printer.py:252 +#: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" msgstr "" @@ -5147,67 +4940,68 @@ msgid "Config type" msgstr "" #: order/admin.py:30 order/models.py:89 -#: report/templates/report/inventree_po_report_base.html:31 -#: report/templates/report/inventree_so_report_base.html:31 +#: report/templates/report/inventree_purchase_order_report.html:31 +#: report/templates/report/inventree_sales_order_report.html:31 #: templates/js/translated/order.js:327 -#: templates/js/translated/purchase_order.js:2126 -#: templates/js/translated/sales_order.js:1847 +#: templates/js/translated/purchase_order.js:2125 +#: templates/js/translated/sales_order.js:1883 msgid "Total Price" msgstr "" -#: order/api.py:157 order/templates/order/order_base.html:118 +#: order/api.py:161 order/serializers.py:91 +#: order/templates/order/order_base.html:118 #: order/templates/order/return_order_base.html:113 -#: order/templates/order/sales_order_base.html:118 +#: order/templates/order/sales_order_base.html:122 msgid "Order Status" msgstr "" -#: order/api.py:161 templates/js/translated/table_filters.js:194 +#: order/api.py:165 templates/js/translated/table_filters.js:194 #: templates/js/translated/table_filters.js:779 msgid "Has Pricing" msgstr "" -#: order/api.py:236 +#: order/api.py:240 msgid "No matching purchase order found" msgstr "" -#: order/api.py:433 order/api.py:813 order/models.py:1382 order/models.py:1489 -#: order/models.py:1535 order/models.py:1649 order/models.py:1803 -#: order/models.py:2207 order/models.py:2258 -#: templates/js/translated/sales_order.js:1488 +#: order/api.py:437 order/api.py:817 order/models.py:1431 order/models.py:1540 +#: order/models.py:1586 order/models.py:1700 order/models.py:1854 +#: order/models.py:2267 order/models.py:2318 +#: templates/js/translated/sales_order.js:1524 msgid "Order" msgstr "" -#: order/api.py:437 order/api.py:834 +#: order/api.py:441 order/api.py:838 #, fuzzy #| msgid "Order Code" msgid "Order Complete" msgstr "订单编码" -#: order/api.py:458 +#: order/api.py:462 #, fuzzy #| msgid "Pending" msgid "Order Pending" msgstr "待定" -#: order/api.py:1505 order/models.py:1383 order/models.py:1490 -#: order/templates/order/order_base.html:9 +#: order/api.py:1509 order/models.py:380 order/models.py:1432 +#: order/models.py:1541 order/templates/order/order_base.html:9 #: order/templates/order/order_base.html:18 -#: report/templates/report/inventree_po_report_base.html:14 -#: stock/templates/stock/item_base.html:176 +#: report/templates/report/inventree_purchase_order_report.html:14 +#: stock/serializers.py:119 stock/templates/stock/item_base.html:176 #: templates/email/overdue_purchase_order.html:15 #: templates/js/translated/part.js:1745 templates/js/translated/pricing.js:804 #: templates/js/translated/purchase_order.js:168 #: templates/js/translated/purchase_order.js:753 -#: templates/js/translated/purchase_order.js:1674 -#: templates/js/translated/stock.js:2259 templates/js/translated/stock.js:2907 +#: templates/js/translated/purchase_order.js:1673 +#: templates/js/translated/stock.js:2260 templates/js/translated/stock.js:2907 msgid "Purchase Order" msgstr "" -#: order/api.py:1509 order/models.py:2208 order/models.py:2259 -#: order/templates/order/return_order_base.html:9 +#: order/api.py:1513 order/models.py:2017 order/models.py:2268 +#: order/models.py:2319 order/templates/order/return_order_base.html:9 #: order/templates/order/return_order_base.html:28 -#: report/templates/report/inventree_return_order_report_base.html:13 -#: templates/js/translated/return_order.js:281 +#: report/templates/report/inventree_return_order_report.html:13 +#: templates/js/translated/return_order.js:280 #: templates/js/translated/stock.js:2941 #, fuzzy #| msgid "Returned" @@ -5230,549 +5024,617 @@ msgstr "货币" msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:246 +#: order/models.py:247 #, fuzzy #| msgid "Build output does not match the parent build" msgid "Contact does not match selected company" msgstr "生产产出与对应生产不匹配" -#: order/models.py:278 +#: order/models.py:290 #, fuzzy #| msgid "Description (optional)" msgid "Order description (optional)" msgstr "描述 (可选)" -#: order/models.py:287 +#: order/models.py:299 #, fuzzy #| msgid "User or group responsible for this order" msgid "Select project code for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:291 order/models.py:1288 order/models.py:1702 +#: order/models.py:303 order/models.py:1337 order/models.py:1753 msgid "Link to external page" msgstr "" -#: order/models.py:299 +#: order/models.py:311 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:313 +#: order/models.py:325 msgid "Created By" msgstr "" -#: order/models.py:321 +#: order/models.py:333 msgid "User or group responsible for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:332 +#: order/models.py:344 #, fuzzy #| msgid "Priority of this build order" msgid "Point of contact for this order" msgstr "此构建订单的优先级" -#: order/models.py:342 +#: order/models.py:354 #, fuzzy #| msgid "User or group responsible for this order" msgid "Company address for this order" msgstr "负责此订单的用户或群组" -#: order/models.py:443 order/models.py:899 +#: order/models.py:464 order/models.py:929 msgid "Order reference" msgstr "" -#: order/models.py:451 order/models.py:923 +#: order/models.py:472 order/models.py:953 msgid "Purchase order status" msgstr "" -#: order/models.py:466 +#: order/models.py:487 msgid "Company from which the items are being ordered" msgstr "订购该商品的公司" -#: order/models.py:477 order/templates/order/order_base.html:148 -#: templates/js/translated/purchase_order.js:1703 +#: order/models.py:498 order/templates/order/order_base.html:148 +#: templates/js/translated/purchase_order.js:1702 msgid "Supplier Reference" msgstr "" -#: order/models.py:478 +#: order/models.py:499 msgid "Supplier order reference code" msgstr "" -#: order/models.py:487 +#: order/models.py:508 msgid "received by" msgstr "" -#: order/models.py:493 order/models.py:2034 +#: order/models.py:514 order/models.py:2094 msgid "Issue Date" msgstr "" -#: order/models.py:494 order/models.py:2035 +#: order/models.py:515 order/models.py:2095 msgid "Date order was issued" msgstr "" -#: order/models.py:501 order/models.py:2042 +#: order/models.py:522 order/models.py:2102 msgid "Date order was completed" msgstr "" -#: order/models.py:545 +#: order/models.py:566 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:739 +#: order/models.py:760 msgid "Quantity must be a positive number" msgstr "数量必须大于0" -#: order/models.py:911 +#: order/models.py:941 msgid "Company to which the items are being sold" msgstr "向其出售该商品的公司" -#: order/models.py:934 order/models.py:2027 +#: order/models.py:964 order/models.py:2087 msgid "Customer Reference " msgstr "" -#: order/models.py:935 order/models.py:2028 +#: order/models.py:965 order/models.py:2088 msgid "Customer order reference code" msgstr "" -#: order/models.py:939 order/models.py:1656 -#: templates/js/translated/sales_order.js:843 -#: templates/js/translated/sales_order.js:1024 +#: order/models.py:969 order/models.py:1707 +#: templates/js/translated/sales_order.js:879 +#: templates/js/translated/sales_order.js:1060 msgid "Shipment Date" msgstr "" -#: order/models.py:948 +#: order/models.py:978 msgid "shipped by" msgstr "" -#: order/models.py:999 -msgid "Order cannot be completed as no parts have been assigned" -msgstr "" +#: order/models.py:1027 +#, fuzzy +#| msgid "Build output is already completed" +msgid "Order is already complete" +msgstr "生产产出已完成" -#: order/models.py:1004 +#: order/models.py:1030 +#, fuzzy +#| msgid "Order cannot be cancelled" +msgid "Order is already cancelled" +msgstr "无法取消订单" + +#: order/models.py:1034 #, fuzzy #| msgid "Build Order is ready to mark as completed" msgid "Only an open order can be marked as complete" msgstr "构建订单已准备好标记为已完成" -#: order/models.py:1008 templates/js/translated/sales_order.js:506 +#: order/models.py:1038 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1013 +#: order/models.py:1043 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1260 +#: order/models.py:1309 msgid "Item quantity" msgstr "" -#: order/models.py:1277 +#: order/models.py:1326 msgid "Line item reference" msgstr "" -#: order/models.py:1284 +#: order/models.py:1333 msgid "Line item notes" msgstr "" -#: order/models.py:1296 +#: order/models.py:1345 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1317 +#: order/models.py:1366 #, fuzzy #| msgid "Description (optional)" msgid "Line item description (optional)" msgstr "描述 (可选)" -#: order/models.py:1323 +#: order/models.py:1372 msgid "Context" msgstr "" -#: order/models.py:1324 +#: order/models.py:1373 msgid "Additional context for this line" msgstr "" -#: order/models.py:1334 +#: order/models.py:1383 msgid "Unit price" msgstr "" -#: order/models.py:1367 +#: order/models.py:1416 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1374 +#: order/models.py:1423 msgid "deleted" msgstr "" -#: order/models.py:1402 +#: order/models.py:1451 msgid "Supplier part" msgstr "供应商商品" -#: order/models.py:1409 order/templates/order/order_base.html:196 +#: order/models.py:1458 order/templates/order/order_base.html:196 #: templates/js/translated/part.js:1869 templates/js/translated/part.js:1901 #: templates/js/translated/purchase_order.js:1306 -#: templates/js/translated/purchase_order.js:2170 -#: templates/js/translated/return_order.js:764 +#: templates/js/translated/purchase_order.js:2169 +#: templates/js/translated/return_order.js:763 #: templates/js/translated/table_filters.js:120 #: templates/js/translated/table_filters.js:602 msgid "Received" msgstr "" -#: order/models.py:1410 +#: order/models.py:1459 msgid "Number of items received" msgstr "" -#: order/models.py:1418 stock/models.py:923 stock/serializers.py:400 +#: order/models.py:1467 stock/models.py:940 stock/serializers.py:529 #: stock/templates/stock/item_base.html:183 -#: templates/js/translated/stock.js:2310 +#: templates/js/translated/stock.js:2311 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:1419 +#: order/models.py:1468 msgid "Unit purchase price" msgstr "" -#: order/models.py:1434 +#: order/models.py:1483 msgid "Where does the Purchaser want this item to be stored?" msgstr "" -#: order/models.py:1523 +#: order/models.py:1574 msgid "Virtual part cannot be assigned to a sales order" msgstr "" -#: order/models.py:1528 +#: order/models.py:1579 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:1554 part/templates/part/part_pricing.html:107 +#: order/models.py:1605 part/templates/part/part_pricing.html:107 #: part/templates/part/prices.html:139 templates/js/translated/pricing.js:957 msgid "Sale Price" msgstr "销售价格" -#: order/models.py:1555 +#: order/models.py:1606 msgid "Unit sale price" msgstr "" -#: order/models.py:1565 +#: order/models.py:1615 order/status_codes.py:43 +#: templates/js/translated/sales_order.js:1559 +#: templates/js/translated/sales_order.js:1680 +#: templates/js/translated/sales_order.js:1993 +msgid "Shipped" +msgstr "已发货" + +#: order/models.py:1616 msgid "Shipped quantity" msgstr "" -#: order/models.py:1657 +#: order/models.py:1708 msgid "Date of shipment" msgstr "" -#: order/models.py:1663 templates/js/translated/sales_order.js:1036 +#: order/models.py:1714 templates/js/translated/sales_order.js:1072 msgid "Delivery Date" msgstr "" -#: order/models.py:1664 +#: order/models.py:1715 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:1672 +#: order/models.py:1723 msgid "Checked By" msgstr "" -#: order/models.py:1673 +#: order/models.py:1724 msgid "User who checked this shipment" msgstr "" -#: order/models.py:1680 order/models.py:1893 order/serializers.py:1350 -#: order/serializers.py:1460 templates/js/translated/model_renderers.js:448 +#: order/models.py:1731 order/models.py:1944 order/serializers.py:1354 +#: order/serializers.py:1464 templates/js/translated/model_renderers.js:454 msgid "Shipment" msgstr "" -#: order/models.py:1681 +#: order/models.py:1732 msgid "Shipment number" msgstr "" -#: order/models.py:1689 +#: order/models.py:1740 msgid "Tracking Number" msgstr "" -#: order/models.py:1690 +#: order/models.py:1741 msgid "Shipment tracking information" msgstr "" -#: order/models.py:1697 +#: order/models.py:1748 msgid "Invoice Number" msgstr "" -#: order/models.py:1698 +#: order/models.py:1749 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:1718 +#: order/models.py:1769 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:1721 +#: order/models.py:1772 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:1839 order/models.py:1841 +#: order/models.py:1890 order/models.py:1892 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:1848 +#: order/models.py:1899 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:1851 +#: order/models.py:1902 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:1854 +#: order/models.py:1905 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:1873 order/serializers.py:1227 +#: order/models.py:1924 order/serializers.py:1231 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:1876 +#: order/models.py:1927 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:1877 plugin/base/barcodes/api.py:481 +#: order/models.py:1928 plugin/base/barcodes/api.py:481 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:1885 +#: order/models.py:1936 msgid "Line" msgstr "" -#: order/models.py:1894 +#: order/models.py:1945 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:1907 order/models.py:2215 -#: templates/js/translated/return_order.js:722 +#: order/models.py:1958 order/models.py:2275 +#: templates/js/translated/return_order.js:721 msgid "Item" msgstr "" -#: order/models.py:1908 +#: order/models.py:1959 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:1917 +#: order/models.py:1968 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:1997 +#: order/models.py:2057 #, fuzzy #| msgid "Build Order Reference" msgid "Return Order reference" msgstr "相关生产订单" -#: order/models.py:2009 +#: order/models.py:2069 #, fuzzy #| msgid "Company from which the items are being ordered" msgid "Company from which items are being returned" msgstr "订购该商品的公司" -#: order/models.py:2021 +#: order/models.py:2081 msgid "Return order status" msgstr "" -#: order/models.py:2200 +#: order/models.py:2260 msgid "Only serialized items can be assigned to a Return Order" msgstr "" -#: order/models.py:2216 +#: order/models.py:2276 #, fuzzy #| msgid "Returned from customer" msgid "Select item to return from customer" msgstr "从客户退货" -#: order/models.py:2222 +#: order/models.py:2282 msgid "Received Date" msgstr "" -#: order/models.py:2223 +#: order/models.py:2283 msgid "The date this this return item was received" msgstr "" -#: order/models.py:2234 templates/js/translated/return_order.js:733 +#: order/models.py:2294 templates/js/translated/return_order.js:732 #: templates/js/translated/table_filters.js:123 msgid "Outcome" msgstr "" -#: order/models.py:2235 +#: order/models.py:2295 msgid "Outcome for this line item" msgstr "" -#: order/models.py:2242 +#: order/models.py:2302 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/serializers.py:283 +#: order/serializers.py:80 order/templates/order/po_sidebar.html:5 +#: order/templates/order/return_order_detail.html:18 +#: order/templates/order/so_sidebar.html:5 +#: report/templates/report/inventree_purchase_order_report.html:22 +#: report/templates/report/inventree_return_order_report.html:19 +#: report/templates/report/inventree_sales_order_report.html:22 +msgid "Line Items" +msgstr "" + +#: order/serializers.py:84 +#, fuzzy +#| msgid "Completed items" +msgid "Completed Lines" +msgstr "已完成项目" + +#: order/serializers.py:287 msgid "Order cannot be cancelled" msgstr "无法取消订单" -#: order/serializers.py:298 order/serializers.py:1243 +#: order/serializers.py:302 order/serializers.py:1247 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:308 order/serializers.py:1253 +#: order/serializers.py:312 order/serializers.py:1257 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:436 +#: order/serializers.py:440 msgid "Order is not open" msgstr "" -#: order/serializers.py:457 +#: order/serializers.py:461 #, fuzzy #| msgid "Part Pricing" msgid "Auto Pricing" msgstr "商品价格" -#: order/serializers.py:459 +#: order/serializers.py:463 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:469 +#: order/serializers.py:473 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:475 +#: order/serializers.py:479 #, fuzzy #| msgid "Select Stock Items" msgid "Merge Items" msgstr "选择库存项" -#: order/serializers.py:477 +#: order/serializers.py:481 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:495 +#: order/serializers.py:499 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:498 +#: order/serializers.py:502 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:506 +#: order/serializers.py:510 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:507 +#: order/serializers.py:511 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:546 order/serializers.py:1321 +#: order/serializers.py:550 order/serializers.py:1325 msgid "Line Item" msgstr "" -#: order/serializers.py:552 +#: order/serializers.py:556 msgid "Line item does not match purchase order" msgstr "" -#: order/serializers.py:562 order/serializers.py:670 order/serializers.py:1676 +#: order/serializers.py:566 order/serializers.py:674 order/serializers.py:1680 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:578 templates/js/translated/purchase_order.js:1130 +#: order/serializers.py:582 templates/js/translated/purchase_order.js:1130 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:586 templates/js/translated/purchase_order.js:1154 +#: order/serializers.py:590 templates/js/translated/purchase_order.js:1154 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:597 templates/js/translated/barcode.js:52 +#: order/serializers.py:601 templates/js/translated/barcode.js:52 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:598 +#: order/serializers.py:602 #, fuzzy #| msgid "Scan Barcode" msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:614 +#: order/serializers.py:618 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:642 msgid "An integer quantity must be provided for trackable parts" msgstr "" -#: order/serializers.py:686 order/serializers.py:1692 +#: order/serializers.py:690 order/serializers.py:1696 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:702 +#: order/serializers.py:706 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:713 +#: order/serializers.py:717 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1070 +#: order/serializers.py:1074 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1130 +#: order/serializers.py:1134 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1191 order/serializers.py:1330 +#: order/serializers.py:1195 order/serializers.py:1334 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1210 +#: order/serializers.py:1214 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1340 +#: order/serializers.py:1344 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1362 order/serializers.py:1468 +#: order/serializers.py:1366 order/serializers.py:1472 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1365 order/serializers.py:1471 +#: order/serializers.py:1369 order/serializers.py:1475 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1412 +#: order/serializers.py:1416 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1419 +#: order/serializers.py:1423 msgid "The following serial numbers are already allocated" msgstr "" -#: order/serializers.py:1646 +#: order/serializers.py:1650 msgid "Return order line item" msgstr "" -#: order/serializers.py:1652 +#: order/serializers.py:1656 #, fuzzy #| msgid "Build output does not match Build Order" msgid "Line item does not match return order" msgstr "生产产出与订单不匹配" -#: order/serializers.py:1655 +#: order/serializers.py:1659 #, fuzzy #| msgid "This build output has already been completed" msgid "Line item has already been received" msgstr "此生产产出已经完成" -#: order/serializers.py:1684 +#: order/serializers.py:1688 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:1762 +#: order/serializers.py:1766 #, fuzzy #| msgid "Uses default currency" msgid "Line price currency" msgstr "使用默认货币" +#: order/status_codes.py:16 order/status_codes.py:46 stock/status_codes.py:16 +msgid "Lost" +msgstr "丢失" + +#: order/status_codes.py:17 order/status_codes.py:47 stock/status_codes.py:22 +msgid "Returned" +msgstr "已退回" + +#: order/status_codes.py:40 order/status_codes.py:67 +msgid "In Progress" +msgstr "" + +#: order/status_codes.py:85 +#, fuzzy +#| msgid "Returned" +msgid "Return" +msgstr "已退回" + +#: order/status_codes.py:88 +msgid "Repair" +msgstr "" + +#: order/status_codes.py:91 +#, fuzzy +#| msgid "Placed" +msgid "Replace" +msgstr "已添加" + +#: order/status_codes.py:94 +msgid "Refund" +msgstr "" + +#: order/status_codes.py:97 +#, fuzzy +#| msgid "Rejected" +msgid "Reject" +msgstr "已拒绝" + #: order/tasks.py:25 msgid "Overdue Purchase Order" msgstr "" @@ -5841,7 +5703,7 @@ msgstr "" #: order/templates/order/order_base.html:84 #: order/templates/order/return_order_base.html:87 -#: order/templates/order/sales_order_base.html:93 +#: order/templates/order/sales_order_base.html:97 msgid "Complete Order" msgstr "" @@ -5853,13 +5715,13 @@ msgstr "供应商商品" #: order/templates/order/order_base.html:106 #: order/templates/order/return_order_base.html:101 -#: order/templates/order/sales_order_base.html:106 +#: order/templates/order/sales_order_base.html:110 msgid "Order Reference" msgstr "" #: order/templates/order/order_base.html:111 #: order/templates/order/return_order_base.html:106 -#: order/templates/order/sales_order_base.html:111 +#: order/templates/order/sales_order_base.html:115 msgid "Order Description" msgstr "" @@ -5868,19 +5730,19 @@ msgid "No suppplier information available" msgstr "" #: order/templates/order/order_base.html:154 -#: order/templates/order/sales_order_base.html:157 +#: order/templates/order/sales_order_base.html:161 msgid "Completed Line Items" msgstr "" #: order/templates/order/order_base.html:160 -#: order/templates/order/sales_order_base.html:163 -#: order/templates/order/sales_order_base.html:173 +#: order/templates/order/sales_order_base.html:167 +#: order/templates/order/sales_order_base.html:177 msgid "Incomplete" msgstr "" #: order/templates/order/order_base.html:179 #: order/templates/order/return_order_base.html:157 -#: report/templates/report/inventree_build_order_base.html:121 +#: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" msgstr "" @@ -5890,17 +5752,17 @@ msgstr "" #: order/templates/order/order_base.html:228 #: order/templates/order/return_order_base.html:199 -#: order/templates/order/sales_order_base.html:239 +#: order/templates/order/sales_order_base.html:243 msgid "Total cost could not be calculated" msgstr "" -#: order/templates/order/order_base.html:318 +#: order/templates/order/order_base.html:314 #, fuzzy #| msgid "Purchase Orders" msgid "Purchase Order QR Code" msgstr "采购订单" -#: order/templates/order/order_base.html:330 +#: order/templates/order/order_base.html:326 #, fuzzy #| msgid "Create Purchase Order" msgid "Link Barcode to Purchase Order" @@ -5956,11 +5818,11 @@ msgstr "" #: part/templates/part/import_wizard/match_fields.html:71 #: part/templates/part/import_wizard/match_references.html:49 #: templates/js/translated/bom.js:133 templates/js/translated/build.js:529 -#: templates/js/translated/build.js:1626 +#: templates/js/translated/build.js:1629 #: templates/js/translated/purchase_order.js:696 #: templates/js/translated/purchase_order.js:1236 -#: templates/js/translated/return_order.js:506 -#: templates/js/translated/sales_order.js:1109 +#: templates/js/translated/return_order.js:505 +#: templates/js/translated/sales_order.js:1145 #: templates/js/translated/stock.js:714 templates/js/translated/stock.js:883 #: templates/patterns/wizard/match_fields.html:70 msgid "Remove row" @@ -6002,15 +5864,6 @@ msgstr "" msgid "Step %(step)s of %(count)s" msgstr "步骤 %(step)s / %(count)s" -#: order/templates/order/po_sidebar.html:5 -#: order/templates/order/return_order_detail.html:18 -#: order/templates/order/so_sidebar.html:5 -#: report/templates/report/inventree_po_report_base.html:22 -#: report/templates/report/inventree_return_order_report_base.html:19 -#: report/templates/report/inventree_so_report_base.html:22 -msgid "Line Items" -msgstr "" - #: order/templates/order/po_sidebar.html:7 msgid "Received Stock" msgstr "" @@ -6023,7 +5876,7 @@ msgstr "" #: order/templates/order/return_order_detail.html:24 #: order/templates/order/sales_order_detail.html:24 #: templates/js/translated/purchase_order.js:414 -#: templates/js/translated/return_order.js:459 +#: templates/js/translated/return_order.js:458 #: templates/js/translated/sales_order.js:237 msgid "Add Line Item" msgstr "" @@ -6074,32 +5927,32 @@ msgid "Print packing list" msgstr "" #: order/templates/order/return_order_base.html:138 -#: order/templates/order/sales_order_base.html:151 -#: templates/js/translated/return_order.js:309 -#: templates/js/translated/sales_order.js:797 +#: order/templates/order/sales_order_base.html:155 +#: templates/js/translated/return_order.js:308 +#: templates/js/translated/sales_order.js:833 msgid "Customer Reference" msgstr "" #: order/templates/order/return_order_base.html:195 -#: order/templates/order/sales_order_base.html:235 +#: order/templates/order/sales_order_base.html:239 #: part/templates/part/part_pricing.html:32 #: part/templates/part/part_pricing.html:58 #: part/templates/part/part_pricing.html:99 #: part/templates/part/part_pricing.html:114 #: templates/js/translated/part.js:1072 -#: templates/js/translated/purchase_order.js:1753 -#: templates/js/translated/return_order.js:381 -#: templates/js/translated/sales_order.js:855 +#: templates/js/translated/purchase_order.js:1752 +#: templates/js/translated/return_order.js:380 +#: templates/js/translated/sales_order.js:891 msgid "Total Cost" msgstr "" -#: order/templates/order/return_order_base.html:263 +#: order/templates/order/return_order_base.html:259 #, fuzzy #| msgid "Returned" msgid "Return Order QR Code" msgstr "已退回" -#: order/templates/order/return_order_base.html:275 +#: order/templates/order/return_order_base.html:271 #, fuzzy #| msgid "Create Purchase Order" msgid "Link Barcode to Return Order" @@ -6123,27 +5976,34 @@ msgid "Ship Items" msgstr "匹配项" #: order/templates/order/sales_order_base.html:92 -#: templates/js/translated/sales_order.js:484 +#: order/templates/order/sales_order_base.html:93 +#, fuzzy +#| msgid "Shipped" +msgid "Mark As Shipped" +msgstr "已发货" + +#: order/templates/order/sales_order_base.html:96 +#: templates/js/translated/sales_order.js:536 msgid "Complete Sales Order" msgstr "" -#: order/templates/order/sales_order_base.html:131 +#: order/templates/order/sales_order_base.html:135 msgid "This Sales Order has not been fully allocated" msgstr "" -#: order/templates/order/sales_order_base.html:169 +#: order/templates/order/sales_order_base.html:173 #: order/templates/order/sales_order_detail.html:99 #: order/templates/order/so_sidebar.html:11 msgid "Completed Shipments" msgstr "" -#: order/templates/order/sales_order_base.html:312 +#: order/templates/order/sales_order_base.html:321 #, fuzzy #| msgid "Sales Order" msgid "Sales Order QR Code" msgstr "销售订单" -#: order/templates/order/sales_order_base.html:324 +#: order/templates/order/sales_order_base.html:333 #, fuzzy #| msgid "New Sales Order" msgid "Link Barcode to Sales Order" @@ -6189,12 +6049,12 @@ msgstr "" msgid "Updated {part} unit-price to {price} and quantity to {qty}" msgstr "" -#: part/admin.py:39 part/admin.py:404 part/models.py:3921 part/stocktake.py:218 +#: part/admin.py:39 part/admin.py:406 part/models.py:3964 part/stocktake.py:218 #: stock/admin.py:153 msgid "Part ID" msgstr "商品ID" -#: part/admin.py:41 part/admin.py:411 part/models.py:3922 part/stocktake.py:219 +#: part/admin.py:41 part/admin.py:413 part/models.py:3965 part/stocktake.py:219 #: stock/admin.py:157 msgid "Part Name" msgstr "" @@ -6203,20 +6063,20 @@ msgstr "" msgid "Part Description" msgstr "" -#: part/admin.py:48 part/models.py:904 part/templates/part/part_base.html:269 -#: report/templates/report/inventree_slr_report.html:103 -#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2341 -#: templates/js/translated/stock.js:2035 +#: part/admin.py:48 part/models.py:947 part/templates/part/part_base.html:269 +#: report/templates/report/inventree_stock_location_report.html:103 +#: templates/js/translated/part.js:1226 templates/js/translated/part.js:2340 +#: templates/js/translated/stock.js:2036 msgid "IPN" msgstr "" -#: part/admin.py:50 part/models.py:913 part/templates/part/part_base.html:277 -#: report/models.py:195 templates/js/translated/part.js:1231 -#: templates/js/translated/part.js:2347 +#: part/admin.py:50 part/models.py:956 part/templates/part/part_base.html:277 +#: report/models.py:161 templates/js/translated/part.js:1231 +#: templates/js/translated/part.js:2346 msgid "Revision" msgstr "" -#: part/admin.py:53 part/admin.py:317 part/models.py:886 +#: part/admin.py:53 part/admin.py:319 part/models.py:929 #: part/templates/part/category.html:94 part/templates/part/part_base.html:298 msgid "Keywords" msgstr "关键词" @@ -6227,15 +6087,15 @@ msgstr "关键词" msgid "Part Image" msgstr "商品名称" -#: part/admin.py:63 part/admin.py:300 part/stocktake.py:221 +#: part/admin.py:63 part/admin.py:302 part/stocktake.py:221 msgid "Category ID" msgstr "类别 ID" -#: part/admin.py:67 part/admin.py:302 part/stocktake.py:222 +#: part/admin.py:67 part/admin.py:304 part/stocktake.py:222 msgid "Category Name" msgstr "" -#: part/admin.py:71 part/admin.py:314 +#: part/admin.py:71 part/admin.py:316 msgid "Default Location ID" msgstr "" @@ -6243,11 +6103,11 @@ msgstr "" msgid "Default Supplier ID" msgstr "" -#: part/admin.py:81 part/models.py:872 part/templates/part/part_base.html:177 +#: part/admin.py:81 part/models.py:915 part/templates/part/part_base.html:177 msgid "Variant Of" msgstr "" -#: part/admin.py:84 part/models.py:1000 part/templates/part/part_base.html:203 +#: part/admin.py:84 part/models.py:1043 part/templates/part/part_base.html:203 msgid "Minimum Stock" msgstr "最低库存" @@ -6260,168 +6120,172 @@ msgstr "" msgid "Building" msgstr "" -#: part/admin.py:155 part/models.py:3080 part/models.py:3094 +#: part/admin.py:155 part/models.py:3123 part/models.py:3137 #: templates/js/translated/part.js:969 msgid "Minimum Cost" msgstr "" -#: part/admin.py:158 part/models.py:3087 part/models.py:3101 +#: part/admin.py:158 part/models.py:3130 part/models.py:3144 #: templates/js/translated/part.js:979 msgid "Maximum Cost" msgstr "" -#: part/admin.py:306 part/admin.py:393 stock/admin.py:58 stock/admin.py:211 +#: part/admin.py:308 part/admin.py:395 stock/admin.py:58 stock/admin.py:211 msgid "Parent ID" msgstr "" -#: part/admin.py:310 part/admin.py:400 stock/admin.py:62 +#: part/admin.py:312 part/admin.py:402 stock/admin.py:62 msgid "Parent Name" msgstr "" -#: part/admin.py:318 part/templates/part/category.html:88 +#: part/admin.py:320 part/templates/part/category.html:88 #: part/templates/part/category.html:101 msgid "Category Path" msgstr "类别路径" -#: part/admin.py:323 part/models.py:391 part/serializers.py:117 +#: part/admin.py:325 part/models.py:393 part/serializers.py:117 #: part/serializers.py:272 part/serializers.py:391 #: part/templates/part/cat_link.html:3 part/templates/part/category.html:23 #: part/templates/part/category.html:141 part/templates/part/category.html:161 #: part/templates/part/category_sidebar.html:9 #: templates/InvenTree/index.html:36 templates/InvenTree/search.html:84 #: templates/InvenTree/settings/sidebar.html:47 -#: templates/js/translated/part.js:2804 templates/js/translated/search.js:130 +#: templates/js/translated/part.js:2803 templates/js/translated/search.js:130 #: templates/navbar.html:24 users/models.py:203 msgid "Parts" msgstr "商品" -#: part/admin.py:384 +#: part/admin.py:386 msgid "BOM Level" msgstr "" -#: part/admin.py:387 +#: part/admin.py:389 msgid "BOM Item ID" msgstr "" -#: part/admin.py:397 +#: part/admin.py:399 msgid "Parent IPN" msgstr "" -#: part/admin.py:408 part/models.py:3923 +#: part/admin.py:410 part/models.py:3966 msgid "Part IPN" msgstr "" -#: part/admin.py:421 part/serializers.py:1261 +#: part/admin.py:423 part/serializers.py:1278 #: templates/js/translated/pricing.js:358 #: templates/js/translated/pricing.js:1024 msgid "Minimum Price" msgstr "" -#: part/admin.py:426 part/serializers.py:1276 +#: part/admin.py:428 part/serializers.py:1293 #: templates/js/translated/pricing.js:353 #: templates/js/translated/pricing.js:1032 msgid "Maximum Price" msgstr "" -#: part/api.py:119 +#: part/api.py:110 msgid "Starred" msgstr "" -#: part/api.py:121 +#: part/api.py:112 msgid "Filter by starred categories" msgstr "" -#: part/api.py:138 stock/api.py:284 +#: part/api.py:129 stock/api.py:318 msgid "Depth" msgstr "" -#: part/api.py:138 +#: part/api.py:129 msgid "Filter by category depth" msgstr "" -#: part/api.py:156 stock/api.py:302 +#: part/api.py:147 stock/api.py:336 msgid "Cascade" msgstr "" -#: part/api.py:158 +#: part/api.py:149 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:178 +#: part/api.py:169 #, fuzzy #| msgid "parent" msgid "Parent" msgstr "上级项" -#: part/api.py:180 +#: part/api.py:171 #, fuzzy #| msgid "Create new part category" msgid "Filter by parent category" msgstr "新建商品类别" -#: part/api.py:213 +#: part/api.py:204 msgid "Exclude Tree" msgstr "" -#: part/api.py:215 +#: part/api.py:206 #, fuzzy #| msgid "Exclude stock items from this selected location" msgid "Exclude sub-categories under the specified category" msgstr "从该选定的仓储地点排除库存项" -#: part/api.py:461 +#: part/api.py:455 #, fuzzy #| msgid "Units" msgid "Has Results" msgstr "单位" -#: part/api.py:628 +#: part/api.py:622 msgid "Incoming Purchase Order" msgstr "" -#: part/api.py:646 +#: part/api.py:640 msgid "Outgoing Sales Order" msgstr "" -#: part/api.py:662 +#: part/api.py:656 msgid "Stock produced by Build Order" msgstr "" -#: part/api.py:746 +#: part/api.py:740 msgid "Stock required for Build Order" msgstr "" -#: part/api.py:893 +#: part/api.py:887 msgid "Valid" msgstr "" -#: part/api.py:894 +#: part/api.py:888 msgid "Validate entire Bill of Materials" msgstr "" -#: part/api.py:900 +#: part/api.py:894 msgid "This option must be selected" msgstr "" -#: part/api.py:1561 part/models.py:896 part/models.py:3386 part/models.py:3866 -#: part/serializers.py:406 part/serializers.py:1117 -#: part/templates/part/part_base.html:260 stock/api.py:745 +#: part/api.py:1111 +msgid "BOM Valid" +msgstr "" + +#: part/api.py:1515 part/models.py:939 part/models.py:3429 part/models.py:3909 +#: part/serializers.py:406 part/serializers.py:1134 +#: part/templates/part/part_base.html:260 stock/api.py:781 #: templates/InvenTree/settings/settings_staff_js.html:300 #: templates/js/translated/notification.js:60 -#: templates/js/translated/part.js:2377 +#: templates/js/translated/part.js:2376 msgid "Category" msgstr "类别" -#: part/api.py:1849 +#: part/api.py:1803 msgid "Uses" msgstr "" -#: part/bom.py:170 part/models.py:101 part/models.py:939 +#: part/bom.py:170 part/models.py:102 part/models.py:982 #: part/templates/part/category.html:116 part/templates/part/part_base.html:367 msgid "Default Location" msgstr "默认仓储地点" -#: part/bom.py:171 part/serializers.py:822 +#: part/bom.py:171 part/serializers.py:837 #: templates/email/low_stock_notification.html:16 msgid "Total Stock" msgstr "" @@ -6430,711 +6294,727 @@ msgstr "" msgid "Input quantity for price calculation" msgstr "" -#: part/models.py:82 part/models.py:3867 part/templates/part/category.html:16 +#: part/models.py:83 part/models.py:3910 part/templates/part/category.html:16 #: part/templates/part/part_app_base.html:10 msgid "Part Category" msgstr "商品类别" -#: part/models.py:83 part/templates/part/category.html:136 +#: part/models.py:84 part/templates/part/category.html:136 #: templates/InvenTree/search.html:97 templates/js/translated/search.js:158 #: users/models.py:202 msgid "Part Categories" msgstr "商品类别" -#: part/models.py:102 +#: part/models.py:103 msgid "Default location for parts in this category" msgstr "此类别商品的默认仓储地点" -#: part/models.py:107 stock/models.py:165 templates/js/translated/part.js:2810 +#: part/models.py:108 stock/models.py:173 templates/js/translated/part.js:2809 #: templates/js/translated/stock.js:2772 #: templates/js/translated/table_filters.js:239 #: templates/js/translated/table_filters.js:283 msgid "Structural" msgstr "" -#: part/models.py:109 +#: part/models.py:110 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:118 +#: part/models.py:119 msgid "Default keywords" msgstr "" -#: part/models.py:119 +#: part/models.py:120 msgid "Default keywords for parts in this category" msgstr "此类别商品的默认关键字" -#: part/models.py:125 stock/models.py:89 stock/models.py:148 +#: part/models.py:126 stock/models.py:85 stock/models.py:156 #: templates/InvenTree/settings/settings_staff_js.html:456 msgid "Icon" msgstr "" -#: part/models.py:126 stock/models.py:149 +#: part/models.py:127 stock/models.py:157 msgid "Icon (optional)" msgstr "" -#: part/models.py:148 +#: part/models.py:149 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:484 +#: part/models.py:482 +#, fuzzy +#| msgid "Print actions" +msgid "Cannot delete this part as it is still active" +msgstr "打印操作" + +#: part/models.py:489 +msgid "Cannot delete this part as it is used in an assembly" +msgstr "" + +#: part/models.py:527 msgid "Invalid choice for parent part" msgstr "" -#: part/models.py:532 part/models.py:539 +#: part/models.py:575 part/models.py:582 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:551 +#: part/models.py:594 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:616 +#: part/models.py:659 #, fuzzy, python-brace-format #| msgid "IPN must match regex pattern {pat}" msgid "IPN must match regex pattern {pattern}" msgstr "IPN 必须匹配正则表达式 {pat}" -#: part/models.py:696 +#: part/models.py:739 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:801 +#: part/models.py:844 msgid "Duplicate IPN not allowed in part settings" msgstr "在商品设置中不允许重复的IPN" -#: part/models.py:811 +#: part/models.py:854 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:826 +#: part/models.py:869 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:855 part/models.py:3922 +#: part/models.py:898 part/models.py:3965 msgid "Part name" msgstr "商品名称" -#: part/models.py:860 +#: part/models.py:903 msgid "Is Template" msgstr "" -#: part/models.py:861 +#: part/models.py:904 msgid "Is this part a template part?" msgstr "" -#: part/models.py:871 +#: part/models.py:914 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:879 +#: part/models.py:922 #, fuzzy #| msgid "Description (optional)" msgid "Part description (optional)" msgstr "描述 (可选)" -#: part/models.py:887 +#: part/models.py:930 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的关键字" -#: part/models.py:897 +#: part/models.py:940 msgid "Part category" msgstr "商品类别" -#: part/models.py:905 +#: part/models.py:948 msgid "Internal Part Number" msgstr "内部商品编号" -#: part/models.py:912 +#: part/models.py:955 msgid "Part revision or version number" msgstr "商品版本号" -#: part/models.py:937 +#: part/models.py:980 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:983 part/templates/part/part_base.html:376 +#: part/models.py:1026 part/templates/part/part_base.html:376 msgid "Default Supplier" msgstr "" -#: part/models.py:984 +#: part/models.py:1027 msgid "Default supplier part" msgstr "默认供应商商品" -#: part/models.py:991 +#: part/models.py:1034 msgid "Default Expiry" msgstr "" -#: part/models.py:992 +#: part/models.py:1035 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1001 +#: part/models.py:1044 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1010 +#: part/models.py:1053 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1017 +#: part/models.py:1060 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1023 +#: part/models.py:1066 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1029 +#: part/models.py:1072 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1035 +#: part/models.py:1078 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1041 +#: part/models.py:1084 msgid "Can this part be sold to customers?" msgstr "此商品可以销售给客户吗?" -#: part/models.py:1045 +#: part/models.py:1088 msgid "Is this part active?" msgstr "" -#: part/models.py:1051 +#: part/models.py:1094 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟商品,如软件产品或许可证吗?" -#: part/models.py:1057 +#: part/models.py:1100 msgid "BOM checksum" msgstr "" -#: part/models.py:1058 +#: part/models.py:1101 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1066 +#: part/models.py:1109 msgid "BOM checked by" msgstr "" -#: part/models.py:1071 +#: part/models.py:1114 msgid "BOM checked date" msgstr "" -#: part/models.py:1087 +#: part/models.py:1130 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1097 +#: part/models.py:1140 #, fuzzy #| msgid "User or group responsible for this order" msgid "Owner responsible for this part" msgstr "负责此订单的用户或群组" -#: part/models.py:1102 part/templates/part/part_base.html:339 +#: part/models.py:1145 part/templates/part/part_base.html:339 #: stock/templates/stock/item_base.html:451 -#: templates/js/translated/part.js:2471 +#: templates/js/translated/part.js:2470 msgid "Last Stocktake" msgstr "" -#: part/models.py:1975 +#: part/models.py:2018 msgid "Sell multiple" msgstr "" -#: part/models.py:2994 +#: part/models.py:3037 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3010 +#: part/models.py:3053 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3011 +#: part/models.py:3054 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3017 +#: part/models.py:3060 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3018 +#: part/models.py:3061 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3024 +#: part/models.py:3067 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3025 +#: part/models.py:3068 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3031 +#: part/models.py:3074 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3032 +#: part/models.py:3075 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3038 +#: part/models.py:3081 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3039 +#: part/models.py:3082 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3045 +#: part/models.py:3088 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3046 +#: part/models.py:3089 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3052 +#: part/models.py:3095 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3053 +#: part/models.py:3096 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3059 +#: part/models.py:3102 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3060 +#: part/models.py:3103 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3066 +#: part/models.py:3109 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3067 +#: part/models.py:3110 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3073 +#: part/models.py:3116 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3074 +#: part/models.py:3117 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3081 +#: part/models.py:3124 msgid "Override minimum cost" msgstr "" -#: part/models.py:3088 +#: part/models.py:3131 msgid "Override maximum cost" msgstr "" -#: part/models.py:3095 +#: part/models.py:3138 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3102 +#: part/models.py:3145 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3108 +#: part/models.py:3151 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3109 +#: part/models.py:3152 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3115 +#: part/models.py:3158 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3116 +#: part/models.py:3159 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3122 +#: part/models.py:3165 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3123 +#: part/models.py:3166 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3129 +#: part/models.py:3172 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3130 +#: part/models.py:3173 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3149 +#: part/models.py:3192 msgid "Part for stocktake" msgstr "" -#: part/models.py:3154 +#: part/models.py:3197 msgid "Item Count" msgstr "" -#: part/models.py:3155 +#: part/models.py:3198 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3163 +#: part/models.py:3206 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3167 part/models.py:3250 +#: part/models.py:3210 part/models.py:3293 #: part/templates/part/part_scheduling.html:13 -#: report/templates/report/inventree_test_report_base.html:106 +#: report/templates/report/inventree_test_report.html:106 #: templates/InvenTree/settings/plugin_settings.html:37 #: templates/InvenTree/settings/settings_staff_js.html:540 #: templates/js/translated/part.js:1085 templates/js/translated/pricing.js:826 #: templates/js/translated/pricing.js:950 -#: templates/js/translated/purchase_order.js:1732 +#: templates/js/translated/purchase_order.js:1731 #: templates/js/translated/stock.js:2821 msgid "Date" msgstr "" -#: part/models.py:3168 +#: part/models.py:3211 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3176 +#: part/models.py:3219 msgid "Additional notes" msgstr "" -#: part/models.py:3186 +#: part/models.py:3229 msgid "User who performed this stocktake" msgstr "" -#: part/models.py:3192 +#: part/models.py:3235 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3193 +#: part/models.py:3236 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3199 +#: part/models.py:3242 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3200 +#: part/models.py:3243 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3256 templates/InvenTree/settings/settings_staff_js.html:529 +#: part/models.py:3299 templates/InvenTree/settings/settings_staff_js.html:529 msgid "Report" msgstr "" -#: part/models.py:3257 +#: part/models.py:3300 msgid "Stocktake report file (generated internally)" msgstr "" -#: part/models.py:3262 templates/InvenTree/settings/settings_staff_js.html:536 +#: part/models.py:3305 templates/InvenTree/settings/settings_staff_js.html:536 msgid "Part Count" msgstr "" -#: part/models.py:3263 +#: part/models.py:3306 msgid "Number of parts covered by stocktake" msgstr "" -#: part/models.py:3273 +#: part/models.py:3316 msgid "User who requested this stocktake report" msgstr "" -#: part/models.py:3435 +#: part/models.py:3478 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3446 +#: part/models.py:3489 msgid "Test templates can only be created for trackable parts" msgstr "" -#: part/models.py:3457 +#: part/models.py:3500 #, fuzzy #| msgid "Attachment with this filename already exists" msgid "Test template with the same key already exists for part" msgstr "使用此文件名的附件已存在" -#: part/models.py:3474 templates/js/translated/part.js:2879 +#: part/models.py:3517 templates/js/translated/part.js:2878 msgid "Test Name" msgstr "" -#: part/models.py:3475 +#: part/models.py:3518 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3481 +#: part/models.py:3524 msgid "Test Key" msgstr "" -#: part/models.py:3482 +#: part/models.py:3525 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3489 +#: part/models.py:3532 msgid "Test Description" msgstr "" -#: part/models.py:3490 +#: part/models.py:3533 msgid "Enter description for this test" msgstr "" -#: part/models.py:3494 +#: part/models.py:3537 report/models.py:208 +#: templates/js/translated/part.js:2899 +#: templates/js/translated/table_filters.js:481 +msgid "Enabled" +msgstr "已启用" + +#: part/models.py:3537 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3499 templates/js/translated/part.js:2908 +#: part/models.py:3542 templates/js/translated/part.js:2907 #: templates/js/translated/table_filters.js:477 msgid "Required" msgstr "" -#: part/models.py:3500 +#: part/models.py:3543 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3505 templates/js/translated/part.js:2916 +#: part/models.py:3548 templates/js/translated/part.js:2915 msgid "Requires Value" msgstr "" -#: part/models.py:3506 +#: part/models.py:3549 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3511 templates/js/translated/part.js:2923 +#: part/models.py:3554 templates/js/translated/part.js:2922 msgid "Requires Attachment" msgstr "" -#: part/models.py:3513 +#: part/models.py:3556 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3560 +#: part/models.py:3603 msgid "Checkbox parameters cannot have units" msgstr "" -#: part/models.py:3565 +#: part/models.py:3608 msgid "Checkbox parameters cannot have choices" msgstr "" -#: part/models.py:3585 +#: part/models.py:3628 #, fuzzy #| msgid "Key string must be unique" msgid "Choices must be unique" msgstr "关键字必须是唯一的" -#: part/models.py:3602 +#: part/models.py:3645 msgid "Parameter template name must be unique" msgstr "" -#: part/models.py:3617 +#: part/models.py:3660 msgid "Parameter Name" msgstr "" -#: part/models.py:3624 +#: part/models.py:3667 msgid "Physical units for this parameter" msgstr "" -#: part/models.py:3632 +#: part/models.py:3675 msgid "Parameter description" msgstr "" -#: part/models.py:3638 templates/js/translated/part.js:1627 +#: part/models.py:3681 templates/js/translated/part.js:1627 #: templates/js/translated/table_filters.js:825 msgid "Checkbox" msgstr "" -#: part/models.py:3639 +#: part/models.py:3682 msgid "Is this parameter a checkbox?" msgstr "" -#: part/models.py:3644 templates/js/translated/part.js:1636 +#: part/models.py:3687 templates/js/translated/part.js:1636 msgid "Choices" msgstr "" -#: part/models.py:3645 +#: part/models.py:3688 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: part/models.py:3722 +#: part/models.py:3765 #, fuzzy #| msgid "Invalid choice for parent build" msgid "Invalid choice for parameter value" msgstr "上级生产选项无效" -#: part/models.py:3765 +#: part/models.py:3808 msgid "Parent Part" msgstr "" -#: part/models.py:3773 part/models.py:3874 part/models.py:3875 +#: part/models.py:3816 part/models.py:3917 part/models.py:3918 #: templates/InvenTree/settings/settings_staff_js.html:295 msgid "Parameter Template" msgstr "参数模板" -#: part/models.py:3778 +#: part/models.py:3821 msgid "Data" msgstr "" -#: part/models.py:3779 +#: part/models.py:3822 msgid "Parameter Value" msgstr "" -#: part/models.py:3881 templates/InvenTree/settings/settings_staff_js.html:304 +#: part/models.py:3924 templates/InvenTree/settings/settings_staff_js.html:304 msgid "Default Value" msgstr "默认值" -#: part/models.py:3882 +#: part/models.py:3925 msgid "Default Parameter Value" msgstr "" -#: part/models.py:3920 +#: part/models.py:3963 msgid "Part ID or part name" msgstr "" -#: part/models.py:3921 +#: part/models.py:3964 msgid "Unique part ID value" msgstr "" -#: part/models.py:3923 +#: part/models.py:3966 msgid "Part IPN value" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "Level" msgstr "" -#: part/models.py:3924 +#: part/models.py:3967 msgid "BOM level" msgstr "" -#: part/models.py:4014 +#: part/models.py:4057 msgid "Select parent part" msgstr "" -#: part/models.py:4024 +#: part/models.py:4067 msgid "Sub part" msgstr "" -#: part/models.py:4025 +#: part/models.py:4068 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4036 +#: part/models.py:4079 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4042 +#: part/models.py:4085 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4048 +#: part/models.py:4091 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4055 part/templates/part/upload_bom.html:55 +#: part/models.py:4098 part/templates/part/upload_bom.html:55 msgid "Overage" msgstr "" -#: part/models.py:4056 +#: part/models.py:4099 msgid "Estimated build wastage quantity (absolute or percentage)" msgstr "" -#: part/models.py:4063 +#: part/models.py:4106 msgid "BOM item reference" msgstr "" -#: part/models.py:4071 +#: part/models.py:4114 msgid "BOM item notes" msgstr "" -#: part/models.py:4077 +#: part/models.py:4120 msgid "Checksum" msgstr "" -#: part/models.py:4078 +#: part/models.py:4121 msgid "BOM line checksum" msgstr "" -#: part/models.py:4083 templates/js/translated/table_filters.js:174 +#: part/models.py:4126 templates/js/translated/table_filters.js:174 msgid "Validated" msgstr "" -#: part/models.py:4084 +#: part/models.py:4127 #, fuzzy #| msgid "Some stock items have been overallocated" msgid "This BOM item has been validated" msgstr "一些库存项已被过度分配" -#: part/models.py:4089 part/templates/part/upload_bom.html:57 +#: part/models.py:4132 part/templates/part/upload_bom.html:57 #: templates/js/translated/bom.js:1054 #: templates/js/translated/table_filters.js:178 #: templates/js/translated/table_filters.js:211 msgid "Gets inherited" msgstr "" -#: part/models.py:4090 +#: part/models.py:4133 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4095 part/templates/part/upload_bom.html:56 +#: part/models.py:4138 part/templates/part/upload_bom.html:56 #: templates/js/translated/bom.js:1046 msgid "Allow Variants" msgstr "" -#: part/models.py:4096 +#: part/models.py:4139 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4181 stock/models.py:647 +#: part/models.py:4224 stock/models.py:664 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4191 part/models.py:4193 +#: part/models.py:4234 part/models.py:4236 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4333 +#: part/models.py:4376 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4354 +#: part/models.py:4397 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4367 +#: part/models.py:4410 msgid "Parent BOM item" msgstr "" -#: part/models.py:4375 +#: part/models.py:4418 msgid "Substitute part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4434 msgid "Part 1" msgstr "" -#: part/models.py:4399 +#: part/models.py:4442 msgid "Part 2" msgstr "" -#: part/models.py:4400 +#: part/models.py:4443 msgid "Select Related Part" msgstr "" -#: part/models.py:4419 +#: part/models.py:4462 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4424 +#: part/models.py:4467 msgid "Duplicate relationship already exists" msgstr "" @@ -7152,7 +7032,7 @@ msgstr "" msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:406 +#: part/serializers.py:210 part/serializers.py:228 stock/serializers.py:535 msgid "Purchase currency of this stock item" msgstr "" @@ -7172,317 +7052,317 @@ msgstr "已拒绝" msgid "Select category" msgstr "设置类别" -#: part/serializers.py:437 +#: part/serializers.py:442 msgid "Original Part" msgstr "" -#: part/serializers.py:438 +#: part/serializers.py:443 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:443 +#: part/serializers.py:448 msgid "Copy Image" msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:449 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:450 part/templates/part/detail.html:277 +#: part/serializers.py:455 part/templates/part/detail.html:277 msgid "Copy BOM" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:456 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:457 +#: part/serializers.py:462 msgid "Copy Parameters" msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:463 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:464 +#: part/serializers.py:469 #, fuzzy #| msgid "Company Notes" msgid "Copy Notes" msgstr "公司备注" -#: part/serializers.py:465 +#: part/serializers.py:470 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:488 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:480 +#: part/serializers.py:490 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:487 +#: part/serializers.py:497 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:498 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:500 +#: part/serializers.py:515 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:516 +#: part/serializers.py:531 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:526 +#: part/serializers.py:541 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:533 +#: part/serializers.py:548 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:542 +#: part/serializers.py:557 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:553 +#: part/serializers.py:568 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:560 +#: part/serializers.py:575 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:823 +#: part/serializers.py:838 #, fuzzy #| msgid "External Link" msgid "External Stock" msgstr "外部链接" -#: part/serializers.py:825 +#: part/serializers.py:840 #, fuzzy #| msgid "Unallocate Stock" msgid "Unallocated Stock" msgstr "未分配库存" -#: part/serializers.py:828 +#: part/serializers.py:843 #, fuzzy #| msgid "Part Stock" msgid "Variant Stock" msgstr "商品库存" -#: part/serializers.py:856 part/templates/part/copy_part.html:9 +#: part/serializers.py:873 part/templates/part/copy_part.html:9 #: templates/js/translated/part.js:471 msgid "Duplicate Part" msgstr "复制部件" -#: part/serializers.py:857 +#: part/serializers.py:874 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:863 templates/js/translated/part.js:102 +#: part/serializers.py:880 templates/js/translated/part.js:102 msgid "Initial Stock" msgstr "" -#: part/serializers.py:864 +#: part/serializers.py:881 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:870 +#: part/serializers.py:887 msgid "Supplier Information" msgstr "" -#: part/serializers.py:871 +#: part/serializers.py:888 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:879 +#: part/serializers.py:896 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:880 +#: part/serializers.py:897 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:885 +#: part/serializers.py:902 #, fuzzy #| msgid "Existing barcode found" msgid "Existing Image" msgstr "发现现有条码" -#: part/serializers.py:886 +#: part/serializers.py:903 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:903 +#: part/serializers.py:920 #, fuzzy #| msgid "Part image not found" msgid "Image file does not exist" msgstr "未找到商品图像" -#: part/serializers.py:1109 +#: part/serializers.py:1126 msgid "Limit stocktake report to a particular part, and any variant parts" msgstr "" -#: part/serializers.py:1119 +#: part/serializers.py:1136 msgid "Limit stocktake report to a particular part category, and any child categories" msgstr "" -#: part/serializers.py:1129 +#: part/serializers.py:1146 msgid "Limit stocktake report to a particular stock location, and any child locations" msgstr "" -#: part/serializers.py:1135 +#: part/serializers.py:1152 msgid "Exclude External Stock" msgstr "" -#: part/serializers.py:1136 +#: part/serializers.py:1153 #, fuzzy #| msgid "Exclude stock items from this selected location" msgid "Exclude stock items in external locations" msgstr "从该选定的仓储地点排除库存项" -#: part/serializers.py:1141 +#: part/serializers.py:1158 msgid "Generate Report" msgstr "" -#: part/serializers.py:1142 +#: part/serializers.py:1159 msgid "Generate report file containing calculated stocktake data" msgstr "" -#: part/serializers.py:1147 +#: part/serializers.py:1164 msgid "Update Parts" msgstr "" -#: part/serializers.py:1148 +#: part/serializers.py:1165 msgid "Update specified parts with calculated stocktake data" msgstr "" -#: part/serializers.py:1156 +#: part/serializers.py:1173 msgid "Stocktake functionality is not enabled" msgstr "" -#: part/serializers.py:1262 +#: part/serializers.py:1279 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1269 +#: part/serializers.py:1286 #, fuzzy #| msgid "Uses default currency" msgid "Minimum price currency" msgstr "使用默认货币" -#: part/serializers.py:1277 +#: part/serializers.py:1294 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1284 +#: part/serializers.py:1301 #, fuzzy #| msgid "Uses default currency" msgid "Maximum price currency" msgstr "使用默认货币" -#: part/serializers.py:1313 +#: part/serializers.py:1330 msgid "Update" msgstr "" -#: part/serializers.py:1314 +#: part/serializers.py:1331 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1337 +#: part/serializers.py:1354 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1344 +#: part/serializers.py:1361 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1347 +#: part/serializers.py:1364 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1714 +#: part/serializers.py:1731 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1722 +#: part/serializers.py:1739 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1723 +#: part/serializers.py:1740 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1728 +#: part/serializers.py:1745 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1746 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1734 +#: part/serializers.py:1751 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1735 +#: part/serializers.py:1752 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1740 +#: part/serializers.py:1757 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1741 +#: part/serializers.py:1758 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/serializers.py:1775 +#: part/serializers.py:1792 msgid "Clear Existing BOM" msgstr "" -#: part/serializers.py:1776 +#: part/serializers.py:1793 msgid "Delete existing BOM items before uploading" msgstr "" -#: part/serializers.py:1806 +#: part/serializers.py:1823 msgid "No part column specified" msgstr "" -#: part/serializers.py:1850 +#: part/serializers.py:1867 msgid "Multiple matching parts found" msgstr "" -#: part/serializers.py:1853 +#: part/serializers.py:1870 msgid "No matching part found" msgstr "" -#: part/serializers.py:1856 +#: part/serializers.py:1873 msgid "Part is not designated as a component" msgstr "" -#: part/serializers.py:1865 +#: part/serializers.py:1882 msgid "Quantity not provided" msgstr "" -#: part/serializers.py:1873 +#: part/serializers.py:1890 msgid "Invalid quantity" msgstr "" -#: part/serializers.py:1894 +#: part/serializers.py:1911 msgid "At least one BOM item is required" msgstr "" #: part/stocktake.py:224 templates/js/translated/part.js:1066 #: templates/js/translated/part.js:1821 templates/js/translated/part.js:1877 -#: templates/js/translated/purchase_order.js:2085 +#: templates/js/translated/purchase_order.js:2084 msgid "Total Quantity" msgstr "" @@ -7638,7 +7518,7 @@ msgstr "" #: part/templates/part/detail.html:67 part/templates/part/part_sidebar.html:50 #: stock/admin.py:251 templates/InvenTree/settings/part_stocktake.html:30 #: templates/InvenTree/settings/sidebar.html:53 -#: templates/js/translated/stock.js:2215 users/models.py:204 +#: templates/js/translated/stock.js:2216 users/models.py:204 msgid "Stocktake" msgstr "" @@ -7736,15 +7616,15 @@ msgstr "商品供应商" msgid "Part Manufacturers" msgstr "商品制造商" -#: part/templates/part/detail.html:659 +#: part/templates/part/detail.html:655 msgid "Related Part" msgstr "" -#: part/templates/part/detail.html:667 +#: part/templates/part/detail.html:663 msgid "Add Related Part" msgstr "" -#: part/templates/part/detail.html:752 +#: part/templates/part/detail.html:748 msgid "Add Test Result Template" msgstr "" @@ -7803,7 +7683,7 @@ msgstr "" #: part/templates/part/part_base.html:52 #: stock/templates/stock/item_base.html:62 -#: stock/templates/stock/location.html:74 +#: stock/templates/stock/location.html:74 templates/js/translated/label.js:143 msgid "Print Label" msgstr "打印标签" @@ -7825,7 +7705,7 @@ msgstr "清点商品库存" msgid "Transfer part stock" msgstr "" -#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2293 +#: part/templates/part/part_base.html:91 templates/js/translated/part.js:2292 msgid "Part actions" msgstr "" @@ -7876,7 +7756,7 @@ msgid "Part is virtual (not a physical part)" msgstr "商品是虚拟的(不是实体零件)" #: part/templates/part/part_base.html:163 -#: part/templates/part/part_base.html:682 +#: part/templates/part/part_base.html:681 msgid "Show Part Details" msgstr "" @@ -7899,7 +7779,7 @@ msgid "Minimum stock level" msgstr "" #: part/templates/part/part_base.html:322 templates/js/translated/bom.js:1071 -#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2444 +#: templates/js/translated/part.js:1264 templates/js/translated/part.js:2443 #: templates/js/translated/pricing.js:391 #: templates/js/translated/pricing.js:1054 msgid "Price Range" @@ -7922,19 +7802,19 @@ msgstr "商品二维码" msgid "Link Barcode to Part" msgstr "" -#: part/templates/part/part_base.html:512 +#: part/templates/part/part_base.html:511 msgid "Calculate" msgstr "" -#: part/templates/part/part_base.html:529 +#: part/templates/part/part_base.html:528 msgid "Remove associated image from this part" msgstr "" -#: part/templates/part/part_base.html:580 +#: part/templates/part/part_base.html:579 msgid "No matching images found" msgstr "" -#: part/templates/part/part_base.html:676 +#: part/templates/part/part_base.html:675 msgid "Hide Part Details" msgstr "" @@ -7993,8 +7873,8 @@ msgstr "" #: templates/InvenTree/search.html:153 #: templates/InvenTree/settings/sidebar.html:51 #: templates/js/translated/part.js:1242 templates/js/translated/part.js:2145 -#: templates/js/translated/part.js:2392 templates/js/translated/stock.js:1059 -#: templates/js/translated/stock.js:2069 templates/navbar.html:31 +#: templates/js/translated/part.js:2391 templates/js/translated/stock.js:1059 +#: templates/js/translated/stock.js:2070 templates/navbar.html:31 msgid "Stock" msgstr "库存" @@ -8042,7 +7922,7 @@ msgstr "编辑" #: stock/templates/stock/item_base.html:446 #: templates/js/translated/company.js:1703 #: templates/js/translated/company.js:1713 -#: templates/js/translated/stock.js:2245 +#: templates/js/translated/stock.js:2246 msgid "Last Updated" msgstr "" @@ -8118,7 +7998,7 @@ msgid "Update Pricing" msgstr "商品价格" #: part/templates/part/stock_count.html:7 -#: templates/js/translated/model_renderers.js:221 +#: templates/js/translated/model_renderers.js:227 #: templates/js/translated/part.js:704 templates/js/translated/part.js:2140 #: templates/js/translated/part.js:2142 msgid "No Stock" @@ -8198,7 +8078,7 @@ msgstr "未找到商品图像" msgid "Part Pricing" msgstr "商品价格" -#: plugin/api.py:168 +#: plugin/api.py:170 msgid "Plugin cannot be deleted as it is currently active" msgstr "" @@ -8282,8 +8162,8 @@ msgstr "" msgid "Stock item does not match line item" msgstr "在BOM中找不到选定的库存项" -#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2590 -#: templates/js/translated/sales_order.js:1917 +#: plugin/base/barcodes/api.py:550 templates/js/translated/build.js:2589 +#: templates/js/translated/sales_order.js:1953 msgid "Insufficient stock available" msgstr "" @@ -8409,27 +8289,27 @@ msgstr "此生产产出已经完成" msgid "Quantity to allocate" msgstr "分配到生产的数量" -#: plugin/base/label/label.py:39 +#: plugin/base/label/label.py:39 templates/js/translated/label.js:155 msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:63 +#: plugin/base/label/mixins.py:56 #, fuzzy #| msgid "Error renaming file" msgid "Error rendering label to PDF" msgstr "重命名文件出错" -#: plugin/base/label/mixins.py:76 +#: plugin/base/label/mixins.py:70 #, fuzzy #| msgid "Error renaming file" msgid "Error rendering label to HTML" msgstr "重命名文件出错" -#: plugin/base/label/mixins.py:111 +#: plugin/base/label/mixins.py:151 #, fuzzy -#| msgid "Error renaming file" -msgid "Error rendering label to PNG" -msgstr "重命名文件出错" +#| msgid "No valid objects provided to template" +msgid "No items provided to print" +msgstr "没有为模板提供有效对象" #: plugin/builtin/barcodes/inventree_barcode.py:25 msgid "InvenTree Barcodes" @@ -8442,7 +8322,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:28 #: plugin/builtin/integration/core_notifications.py:35 #: plugin/builtin/integration/currency_exchange.py:21 -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:22 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:63 #: plugin/builtin/suppliers/digikey.py:19 plugin/builtin/suppliers/lcsc.py:21 @@ -8498,23 +8378,23 @@ msgstr "" msgid "Default currency exchange integration" msgstr "该公司使用的默认货币" -#: plugin/builtin/labels/inventree_label.py:20 +#: plugin/builtin/labels/inventree_label.py:19 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:21 +#: plugin/builtin/labels/inventree_label.py:20 #, fuzzy #| msgid "Part(s) must be selected before printing labels" msgid "Provides native support for printing PDF labels" msgstr "打印标签前必须选择商品" -#: plugin/builtin/labels/inventree_label.py:29 +#: plugin/builtin/labels/inventree_label.py:28 #, fuzzy #| msgid "Debug Mode" msgid "Debug mode" msgstr "调试模式" -#: plugin/builtin/labels/inventree_label.py:30 +#: plugin/builtin/labels/inventree_label.py:29 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -8528,11 +8408,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "打印标签前必须选择商品" -#: plugin/builtin/labels/inventree_machine.py:150 +#: plugin/builtin/labels/inventree_machine.py:151 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:167 +#: plugin/builtin/labels/inventree_machine.py:168 msgid "Options" msgstr "选项" @@ -8560,7 +8440,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:47 report/models.py:209 +#: plugin/builtin/labels/label_sheet.py:47 report/models.py:307 msgid "Landscape" msgstr "" @@ -8576,11 +8456,11 @@ msgstr "" msgid "Arrays multiple labels onto a single sheet" msgstr "" -#: plugin/builtin/labels/label_sheet.py:94 +#: plugin/builtin/labels/label_sheet.py:99 msgid "Label is too large for page size" msgstr "" -#: plugin/builtin/labels/label_sheet.py:128 +#: plugin/builtin/labels/label_sheet.py:133 msgid "No labels were generated" msgstr "" @@ -8694,63 +8574,64 @@ msgstr "打印操作" msgid "Uninstalled plugin successfully" msgstr "安装到组装中" -#: plugin/models.py:30 +#: plugin/models.py:35 msgid "Plugin Configuration" msgstr "" -#: plugin/models.py:31 +#: plugin/models.py:36 msgid "Plugin Configurations" msgstr "" -#: plugin/models.py:34 users/models.py:100 +#: plugin/models.py:42 users/models.py:100 msgid "Key" msgstr "" -#: plugin/models.py:34 +#: plugin/models.py:43 msgid "Key of plugin" msgstr "" -#: plugin/models.py:42 +#: plugin/models.py:51 msgid "PluginName of the plugin" msgstr "" -#: plugin/models.py:49 plugin/serializers.py:90 +#: plugin/models.py:58 plugin/serializers.py:90 msgid "Package Name" msgstr "" -#: plugin/models.py:51 +#: plugin/models.py:60 msgid "Name of the installed package, if the plugin was installed via PIP" msgstr "" -#: plugin/models.py:56 +#: plugin/models.py:65 msgid "Is the plugin active" msgstr "" -#: plugin/models.py:147 templates/js/translated/table_filters.js:370 +#: plugin/models.py:156 templates/js/translated/table_filters.js:370 #: templates/js/translated/table_filters.js:504 msgid "Installed" msgstr "" -#: plugin/models.py:156 +#: plugin/models.py:165 msgid "Sample plugin" msgstr "" -#: plugin/models.py:164 +#: plugin/models.py:173 msgid "Builtin Plugin" msgstr "" -#: plugin/models.py:172 +#: plugin/models.py:181 #, fuzzy #| msgid "Packaging" msgid "Package Plugin" msgstr "打包" -#: plugin/models.py:196 templates/InvenTree/settings/plugin_settings.html:9 +#: plugin/models.py:205 report/models.py:474 +#: templates/InvenTree/settings/plugin_settings.html:9 #: templates/js/translated/plugin.js:51 msgid "Plugin" msgstr "" -#: plugin/models.py:243 +#: plugin/models.py:252 msgid "Method" msgstr "" @@ -8758,17 +8639,17 @@ msgstr "" msgid "No author found" msgstr "" -#: plugin/registry.py:588 +#: plugin/registry.py:597 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:591 +#: plugin/registry.py:600 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:593 +#: plugin/registry.py:602 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -8853,297 +8734,421 @@ msgstr "" msgid "Either packagename of URL must be provided" msgstr "" -#: plugin/serializers.py:156 +#: plugin/serializers.py:161 msgid "Full reload" msgstr "" -#: plugin/serializers.py:157 +#: plugin/serializers.py:162 msgid "Perform a full reload of the plugin registry" msgstr "" -#: plugin/serializers.py:163 +#: plugin/serializers.py:168 msgid "Force reload" msgstr "" -#: plugin/serializers.py:165 +#: plugin/serializers.py:170 msgid "Force a reload of the plugin registry, even if it is already loaded" msgstr "" -#: plugin/serializers.py:172 +#: plugin/serializers.py:177 #, fuzzy #| msgid "Select supplier" msgid "Collect plugins" msgstr "选择供应商" -#: plugin/serializers.py:173 +#: plugin/serializers.py:178 msgid "Collect plugins and add them to the registry" msgstr "" -#: plugin/serializers.py:195 +#: plugin/serializers.py:205 msgid "Activate Plugin" msgstr "" -#: plugin/serializers.py:196 +#: plugin/serializers.py:206 msgid "Activate this plugin" msgstr "" -#: plugin/serializers.py:219 +#: plugin/serializers.py:234 #, fuzzy #| msgid "Delete location" msgid "Delete configuration" msgstr "删除仓储地" -#: plugin/serializers.py:220 +#: plugin/serializers.py:235 msgid "Delete the plugin configuration from the database" msgstr "" -#: report/api.py:158 +#: report/api.py:77 msgid "No valid objects provided to template" msgstr "没有为模板提供有效对象" -#: report/api.py:197 report/api.py:234 +#: report/api.py:89 report/serializers.py:53 +msgid "Model Type" +msgstr "" + +#: report/api.py:92 report/models.py:438 report/serializers.py:98 +#: report/serializers.py:148 templates/js/translated/purchase_order.js:1747 +#: templates/js/translated/return_order.js:353 +#: templates/js/translated/sales_order.js:887 +#: templates/js/translated/sales_order.js:1047 +msgid "Items" +msgstr "" + +#: report/api.py:168 +#, fuzzy +#| msgid "Part image not found" +msgid "Plugin not found" +msgstr "未找到商品图像" + +#: report/api.py:170 +#, fuzzy +#| msgid "Print actions" +msgid "Plugin is not active" +msgstr "打印操作" + +#: report/api.py:172 +#, fuzzy +#| msgid "Part(s) must be selected before printing labels" +msgid "Plugin does not support label printing" +msgstr "打印标签前必须选择商品" + +#: report/api.py:221 +#, fuzzy +#| msgid "Inline label display" +msgid "Invalid label dimensions" +msgstr "内嵌标签显示" + +#: report/api.py:236 report/api.py:316 +#, fuzzy +#| msgid "No valid objects provided to template" +msgid "No valid items provided to template" +msgstr "没有为模板提供有效对象" + +#: report/api.py:271 +#, fuzzy +#| msgid "Error renaming file" +msgid "Error printing label" +msgstr "重命名文件出错" + +#: report/api.py:362 report/api.py:398 #, python-brace-format msgid "Template file '{template}' is missing or does not exist" msgstr "" -#: report/api.py:319 -msgid "Test report" -msgstr "" - -#: report/helpers.py:15 +#: report/helpers.py:41 msgid "A4" msgstr "" -#: report/helpers.py:16 +#: report/helpers.py:42 msgid "A3" msgstr "" -#: report/helpers.py:17 +#: report/helpers.py:43 msgid "Legal" msgstr "" -#: report/helpers.py:18 +#: report/helpers.py:44 msgid "Letter" msgstr "" -#: report/models.py:177 +#: report/models.py:118 +#, fuzzy +#| msgid "Attachment with this filename already exists" +msgid "Template file with this name already exists" +msgstr "使用此文件名的附件已存在" + +#: report/models.py:150 msgid "Template name" msgstr "" -#: report/models.py:183 -msgid "Report template file" +#: report/models.py:156 +#, fuzzy +#| msgid "Company description" +msgid "Template description" +msgstr "公司简介" + +#: report/models.py:162 +msgid "Revision number (auto-increments)" msgstr "" -#: report/models.py:190 -msgid "Report template description" +#: report/models.py:202 +msgid "Filename Pattern" +msgstr "文件名样式" + +#: report/models.py:203 +msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:196 -msgid "Report revision number (auto-increments)" -msgstr "" +#: report/models.py:208 +#, fuzzy +#| msgid "Label template is enabled" +msgid "Template is enabled" +msgstr "标签模板已启用" -#: report/models.py:204 +#: report/models.py:214 +#, fuzzy +#| msgid "Part Parameter Templates" +msgid "Target model type for template" +msgstr "商品参数模板" + +#: report/models.py:234 +msgid "Filters" +msgstr "筛选器" + +#: report/models.py:235 +#, fuzzy +#| msgid "Query filters (comma-separated list of key=value pairs)," +msgid "Template query filters (comma-separated list of key=value pairs)" +msgstr "查询筛选器 (逗号分隔的键值对列表)" + +#: report/models.py:294 report/models.py:361 +#, fuzzy +#| msgid "Template" +msgid "Template file" +msgstr "模板" + +#: report/models.py:302 #, fuzzy #| msgid "Default page size for PDF reports" msgid "Page size for PDF reports" msgstr "PDF 报表默认页面大小" -#: report/models.py:210 +#: report/models.py:308 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:318 -msgid "Pattern for generating report filenames" -msgstr "" +#: report/models.py:367 +msgid "Width [mm]" +msgstr "宽度 [mm]" -#: report/models.py:325 -msgid "Report template is enabled" -msgstr "" +#: report/models.py:368 +msgid "Label width, specified in mm" +msgstr "标注宽度,以毫米为单位。" -#: report/models.py:347 -msgid "StockItem query filters (comma-separated list of key=value pairs)" -msgstr "" +#: report/models.py:374 +msgid "Height [mm]" +msgstr "高度 [mm]" -#: report/models.py:354 -msgid "Include Installed Tests" -msgstr "" +#: report/models.py:375 +msgid "Label height, specified in mm" +msgstr "标注高度,以毫米为单位。" -#: report/models.py:356 -msgid "Include test results for stock items installed inside assembled item" -msgstr "" - -#: report/models.py:424 -msgid "Build Filters" -msgstr "" - -#: report/models.py:425 -msgid "Build query filters (comma-separated list of key=value pairs" -msgstr "" - -#: report/models.py:464 -msgid "Part Filters" -msgstr "商品过滤器" - -#: report/models.py:465 -msgid "Part query filters (comma-separated list of key=value pairs" -msgstr "" - -#: report/models.py:497 -msgid "Purchase order query filters" -msgstr "" - -#: report/models.py:533 -msgid "Sales order query filters" -msgstr "" - -#: report/models.py:569 -msgid "Return order query filters" -msgstr "" - -#: report/models.py:641 +#: report/models.py:438 #, fuzzy -#| msgid "Attachment with this filename already exists" -msgid "Snippet file with this name already exists" -msgstr "使用此文件名的附件已存在" +#| msgid "Number of stock items to build" +msgid "Number of items to process" +msgstr "要生产的项目数量" -#: report/models.py:648 +#: report/models.py:444 +msgid "Report generation is complete" +msgstr "" + +#: report/models.py:448 templates/js/translated/build.js:2177 +msgid "Progress" +msgstr "" + +#: report/models.py:448 +#, fuzzy +#| msgid "Report Settings" +msgid "Report generation progress" +msgstr "报表设置" + +#: report/models.py:456 +#, fuzzy +#| msgid "Delete Template" +msgid "Report Template" +msgstr "删除模板" + +#: report/models.py:463 report/models.py:486 +#, fuzzy +#| msgid "Output Actions" +msgid "Output File" +msgstr "输出操作" + +#: report/models.py:464 report/models.py:487 +#, fuzzy +#| msgid "Delete outputs" +msgid "Generated output file" +msgstr "删除输出" + +#: report/models.py:475 +#, fuzzy +#| msgid "Select supplier" +msgid "Label output plugin" +msgstr "选择供应商" + +#: report/models.py:479 +#, fuzzy +#| msgid "Label template file" +msgid "Label Template" +msgstr "标签模板文件" + +#: report/models.py:502 msgid "Snippet" msgstr "" -#: report/models.py:649 +#: report/models.py:503 msgid "Report snippet file" msgstr "" -#: report/models.py:656 +#: report/models.py:510 msgid "Snippet file description" msgstr "" -#: report/models.py:714 -#, fuzzy -#| msgid "Attachment with this filename already exists" -msgid "Asset file with this name already exists" -msgstr "使用此文件名的附件已存在" - -#: report/models.py:722 +#: report/models.py:528 msgid "Asset" msgstr "" -#: report/models.py:723 +#: report/models.py:529 msgid "Report asset file" msgstr "" -#: report/models.py:730 +#: report/models.py:536 msgid "Asset file description" msgstr "" -#: report/models.py:752 +#: report/serializers.py:91 #, fuzzy -#| msgid "Query filters (comma-separated list of key=value pairs)," -msgid "stock location query filters (comma-separated list of key=value pairs)" -msgstr "查询筛选器 (逗号分隔的键值对列表)" +#| msgid "Select Label Template" +msgid "Select report template" +msgstr "选择标签模板" + +#: report/serializers.py:99 report/serializers.py:149 +msgid "List of item primary keys to include in the report" +msgstr "" + +#: report/serializers.py:132 +#, fuzzy +#| msgid "Select Label Template" +msgid "Select label template" +msgstr "选择标签模板" + +#: report/serializers.py:140 +#, fuzzy +#| msgid "Print actions" +msgid "Printing Plugin" +msgstr "打印操作" + +#: report/serializers.py:141 +msgid "Select plugin to use for label printing" +msgstr "" + +#: report/templates/label/part_label.html:31 +#: report/templates/label/stockitem_qr.html:21 +#: report/templates/label/stocklocation_qr.html:20 +#: templates/allauth_2fa/setup.html:18 +#, fuzzy +#| msgid "Part QR Code" +msgid "QR Code" +msgstr "商品二维码" + +#: report/templates/label/part_label_code128.html:31 +#: report/templates/label/stocklocation_qr_and_text.html:31 +#: templates/qr_code.html:7 +msgid "QR code" +msgstr "" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" msgstr "" -#: report/templates/report/inventree_build_order_base.html:146 +#: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" msgstr "" -#: report/templates/report/inventree_po_report_base.html:15 +#: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" msgstr "" -#: report/templates/report/inventree_po_report_base.html:30 -#: report/templates/report/inventree_so_report_base.html:30 +#: report/templates/report/inventree_purchase_order_report.html:30 +#: report/templates/report/inventree_sales_order_report.html:30 #: templates/js/translated/order.js:316 templates/js/translated/pricing.js:527 #: templates/js/translated/pricing.js:596 #: templates/js/translated/pricing.js:834 -#: templates/js/translated/purchase_order.js:2116 -#: templates/js/translated/sales_order.js:1837 +#: templates/js/translated/purchase_order.js:2115 +#: templates/js/translated/sales_order.js:1873 msgid "Unit Price" msgstr "单价" -#: report/templates/report/inventree_po_report_base.html:55 -#: report/templates/report/inventree_return_order_report_base.html:48 -#: report/templates/report/inventree_so_report_base.html:55 +#: report/templates/report/inventree_purchase_order_report.html:55 +#: report/templates/report/inventree_return_order_report.html:48 +#: report/templates/report/inventree_sales_order_report.html:55 #, fuzzy #| msgid "Extra build notes" msgid "Extra Line Items" msgstr "额外的生产备注" -#: report/templates/report/inventree_po_report_base.html:72 -#: report/templates/report/inventree_so_report_base.html:72 -#: templates/js/translated/purchase_order.js:2018 -#: templates/js/translated/sales_order.js:1806 +#: report/templates/report/inventree_purchase_order_report.html:72 +#: report/templates/report/inventree_sales_order_report.html:72 +#: templates/js/translated/purchase_order.js:2017 +#: templates/js/translated/sales_order.js:1842 msgid "Total" msgstr "" -#: report/templates/report/inventree_return_order_report_base.html:25 -#: report/templates/report/inventree_test_report_base.html:88 -#: stock/models.py:809 stock/templates/stock/item_base.html:311 -#: templates/js/translated/build.js:519 templates/js/translated/build.js:1364 -#: templates/js/translated/build.js:2353 -#: templates/js/translated/model_renderers.js:224 -#: templates/js/translated/return_order.js:540 -#: templates/js/translated/return_order.js:724 +#: report/templates/report/inventree_return_order_report.html:25 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:826 +#: stock/serializers.py:150 stock/templates/stock/item_base.html:311 +#: templates/js/translated/build.js:519 templates/js/translated/build.js:1367 +#: templates/js/translated/build.js:2355 +#: templates/js/translated/model_renderers.js:230 +#: templates/js/translated/return_order.js:539 +#: templates/js/translated/return_order.js:723 #: templates/js/translated/sales_order.js:315 -#: templates/js/translated/sales_order.js:1611 -#: templates/js/translated/sales_order.js:1696 +#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/sales_order.js:1732 #: templates/js/translated/stock.js:596 msgid "Serial Number" msgstr "序列号" -#: report/templates/report/inventree_slr_report.html:97 +#: report/templates/report/inventree_stock_location_report.html:97 #, fuzzy #| msgid "Stock item created" msgid "Stock location items" msgstr "库存项已创建" -#: report/templates/report/inventree_test_report_base.html:21 +#: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" msgstr "" -#: report/templates/report/inventree_test_report_base.html:97 +#: report/templates/report/inventree_test_report.html:97 msgid "Test Results" msgstr "" -#: report/templates/report/inventree_test_report_base.html:102 -#: templates/js/translated/stock.js:1492 +#: report/templates/report/inventree_test_report.html:102 +#: templates/js/translated/stock.js:1495 msgid "Test" msgstr "" -#: report/templates/report/inventree_test_report_base.html:103 -#: stock/models.py:2430 +#: report/templates/report/inventree_test_report.html:103 stock/models.py:2423 msgid "Result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:130 +#: report/templates/report/inventree_test_report.html:130 msgid "Pass" msgstr "" -#: report/templates/report/inventree_test_report_base.html:132 +#: report/templates/report/inventree_test_report.html:132 msgid "Fail" msgstr "" -#: report/templates/report/inventree_test_report_base.html:139 +#: report/templates/report/inventree_test_report.html:139 #, fuzzy #| msgid "Restart required" msgid "No result (required)" msgstr "需要重启" -#: report/templates/report/inventree_test_report_base.html:141 +#: report/templates/report/inventree_test_report.html:141 msgid "No result" msgstr "" -#: report/templates/report/inventree_test_report_base.html:154 +#: report/templates/report/inventree_test_report.html:154 #: stock/templates/stock/stock_sidebar.html:16 msgid "Installed Items" msgstr "" -#: report/templates/report/inventree_test_report_base.html:168 -#: stock/admin.py:162 templates/js/translated/stock.js:700 -#: templates/js/translated/stock.js:871 templates/js/translated/stock.js:3110 +#: report/templates/report/inventree_test_report.html:168 stock/admin.py:162 +#: templates/js/translated/stock.js:700 templates/js/translated/stock.js:871 +#: templates/js/translated/stock.js:3110 msgid "Serial" msgstr "" @@ -9204,7 +9209,7 @@ msgstr "" msgid "Customer ID" msgstr "" -#: stock/admin.py:201 stock/models.py:789 +#: stock/admin.py:201 stock/models.py:806 #: stock/templates/stock/item_base.html:354 msgid "Installed In" msgstr "" @@ -9231,605 +9236,801 @@ msgstr "" msgid "Delete on Deplete" msgstr "删除模板" -#: stock/admin.py:256 stock/models.py:883 +#: stock/admin.py:256 stock/models.py:900 #: stock/templates/stock/item_base.html:433 -#: templates/js/translated/stock.js:2229 users/models.py:124 +#: templates/js/translated/stock.js:2230 users/models.py:124 msgid "Expiry Date" msgstr "" -#: stock/api.py:284 +#: stock/api.py:318 #, fuzzy #| msgid "Print Order Reports" msgid "Filter by location depth" msgstr "打印订单报表" -#: stock/api.py:304 +#: stock/api.py:338 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:325 +#: stock/api.py:359 #, fuzzy #| msgid "Print actions" msgid "Parent Location" msgstr "打印操作" -#: stock/api.py:326 +#: stock/api.py:360 #, fuzzy #| msgid "Delete location" msgid "Filter by parent location" msgstr "删除仓储地" -#: stock/api.py:579 templates/js/translated/table_filters.js:427 +#: stock/api.py:615 templates/js/translated/table_filters.js:427 msgid "External Location" msgstr "" -#: stock/api.py:767 +#: stock/api.py:803 #, fuzzy #| msgid "Part name" msgid "Part Tree" msgstr "商品名称" -#: stock/api.py:797 +#: stock/api.py:833 msgid "Expiry date before" msgstr "" -#: stock/api.py:801 +#: stock/api.py:837 msgid "Expiry date after" msgstr "" -#: stock/api.py:804 stock/templates/stock/item_base.html:439 +#: stock/api.py:840 stock/templates/stock/item_base.html:439 #: templates/js/translated/table_filters.js:441 msgid "Stale" msgstr "" -#: stock/api.py:891 +#: stock/api.py:927 msgid "Quantity is required" msgstr "" -#: stock/api.py:897 +#: stock/api.py:933 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:928 +#: stock/api.py:964 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:938 +#: stock/api.py:974 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:969 +#: stock/api.py:1005 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/models.py:63 +#: stock/models.py:59 #, fuzzy #| msgid "Stock Location" msgid "Stock Location type" msgstr "仓储地点" -#: stock/models.py:64 +#: stock/models.py:60 #, fuzzy #| msgid "Stock Locations" msgid "Stock Location types" msgstr "仓储地点" -#: stock/models.py:90 +#: stock/models.py:86 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:125 stock/models.py:771 +#: stock/models.py:123 stock/models.py:788 #: stock/templates/stock/location.html:17 #: stock/templates/stock/stock_app_base.html:8 msgid "Stock Location" msgstr "仓储地点" -#: stock/models.py:126 stock/templates/stock/location.html:179 +#: stock/models.py:124 stock/templates/stock/location.html:186 #: templates/InvenTree/search.html:166 templates/js/translated/search.js:178 #: users/models.py:205 msgid "Stock Locations" msgstr "仓储地点" -#: stock/models.py:158 stock/models.py:932 +#: stock/models.py:166 stock/models.py:949 #: stock/templates/stock/item_base.html:247 msgid "Owner" msgstr "" -#: stock/models.py:159 stock/models.py:933 +#: stock/models.py:167 stock/models.py:950 msgid "Select Owner" msgstr "" -#: stock/models.py:167 +#: stock/models.py:175 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:174 templates/js/translated/stock.js:2781 +#: stock/models.py:182 templates/js/translated/stock.js:2781 #: templates/js/translated/table_filters.js:243 msgid "External" msgstr "" -#: stock/models.py:175 +#: stock/models.py:183 msgid "This is an external stock location" msgstr "" -#: stock/models.py:181 templates/js/translated/stock.js:2790 +#: stock/models.py:189 templates/js/translated/stock.js:2790 #: templates/js/translated/table_filters.js:246 #, fuzzy #| msgid "Location" msgid "Location type" msgstr "地点" -#: stock/models.py:185 +#: stock/models.py:193 #, fuzzy #| msgid "Stock item created" msgid "Stock location type of this location" msgstr "库存项已创建" -#: stock/models.py:254 +#: stock/models.py:262 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:626 +#: stock/models.py:643 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:653 stock/serializers.py:290 +#: stock/models.py:670 stock/serializers.py:419 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:670 +#: stock/models.py:687 #, fuzzy, python-brace-format #| msgid "Part type ('{pf}') must be {pe}" msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "商品类型 ('{pf}') 必须是 {pe}" -#: stock/models.py:680 stock/models.py:693 +#: stock/models.py:697 stock/models.py:710 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:683 +#: stock/models.py:700 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:707 +#: stock/models.py:724 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:712 +#: stock/models.py:729 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:725 +#: stock/models.py:742 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:741 +#: stock/models.py:758 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:753 +#: stock/models.py:770 msgid "Base part" msgstr "" -#: stock/models.py:763 +#: stock/models.py:780 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:775 +#: stock/models.py:792 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:783 stock/serializers.py:1351 +#: stock/models.py:800 stock/serializers.py:1480 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:794 +#: stock/models.py:811 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:813 +#: stock/models.py:830 msgid "Serial number for this item" msgstr "" -#: stock/models.py:827 stock/serializers.py:1334 +#: stock/models.py:844 stock/serializers.py:1463 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:832 +#: stock/models.py:849 msgid "Stock Quantity" msgstr "" -#: stock/models.py:842 +#: stock/models.py:859 msgid "Source Build" msgstr "" -#: stock/models.py:845 +#: stock/models.py:862 msgid "Build for this stock item" msgstr "" -#: stock/models.py:852 stock/templates/stock/item_base.html:363 +#: stock/models.py:869 stock/templates/stock/item_base.html:363 #, fuzzy #| msgid "Issued By" msgid "Consumed By" msgstr "发布者" -#: stock/models.py:855 +#: stock/models.py:872 #, fuzzy #| msgid "BuildOrder to which this build is allocated" msgid "Build order which consumed this stock item" msgstr "此次生产匹配的订单" -#: stock/models.py:864 +#: stock/models.py:881 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:868 +#: stock/models.py:885 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:874 +#: stock/models.py:891 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:885 +#: stock/models.py:902 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:903 +#: stock/models.py:920 msgid "Delete on deplete" msgstr "" -#: stock/models.py:904 +#: stock/models.py:921 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:924 +#: stock/models.py:941 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:955 +#: stock/models.py:972 msgid "Converted to part" msgstr "" -#: stock/models.py:1465 +#: stock/models.py:1490 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1471 +#: stock/models.py:1496 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1479 +#: stock/models.py:1504 #, fuzzy, python-brace-format #| msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: stock/models.py:1485 +#: stock/models.py:1510 msgid "Serial numbers must be a list of integers" msgstr "" -#: stock/models.py:1490 +#: stock/models.py:1515 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1498 stock/serializers.py:529 +#: stock/models.py:1523 stock/serializers.py:658 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/models.py:1595 +#: stock/models.py:1620 #, fuzzy #| msgid "Part image not found" msgid "Test template does not exist" msgstr "未找到商品图像" -#: stock/models.py:1613 +#: stock/models.py:1638 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:1617 +#: stock/models.py:1642 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:1620 +#: stock/models.py:1645 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:1623 +#: stock/models.py:1648 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:1626 +#: stock/models.py:1651 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:1629 +#: stock/models.py:1654 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:1636 stock/serializers.py:1240 +#: stock/models.py:1661 stock/serializers.py:1369 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:1640 +#: stock/models.py:1665 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:1648 +#: stock/models.py:1673 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:1653 +#: stock/models.py:1678 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:1870 +#: stock/models.py:1905 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2333 +#: stock/models.py:2326 msgid "Entry notes" msgstr "" -#: stock/models.py:2398 +#: stock/models.py:2391 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2403 +#: stock/models.py:2396 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2430 +#: stock/models.py:2423 msgid "Test result" msgstr "" -#: stock/models.py:2437 +#: stock/models.py:2430 msgid "Test output value" msgstr "" -#: stock/models.py:2445 +#: stock/models.py:2438 msgid "Test result attachment" msgstr "" -#: stock/models.py:2449 +#: stock/models.py:2442 msgid "Test notes" msgstr "" -#: stock/models.py:2457 templates/js/translated/stock.js:1545 +#: stock/models.py:2450 templates/js/translated/stock.js:1548 #, fuzzy #| msgid "Destination" msgid "Test station" msgstr "目的地" -#: stock/models.py:2458 +#: stock/models.py:2451 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:2464 +#: stock/models.py:2457 msgid "Started" msgstr "" -#: stock/models.py:2465 +#: stock/models.py:2458 #, fuzzy #| msgid "Timestamp of last update" msgid "The timestamp of the test start" msgstr "最后一次更新时间" -#: stock/models.py:2471 +#: stock/models.py:2464 #, fuzzy #| msgid "Danish" msgid "Finished" msgstr "丹麦语" -#: stock/models.py:2472 +#: stock/models.py:2465 #, fuzzy #| msgid "Timestamp of last update" msgid "The timestamp of the test finish" msgstr "最后一次更新时间" -#: stock/serializers.py:100 +#: stock/serializers.py:75 +msgid "Generated batch code" +msgstr "" + +#: stock/serializers.py:84 +#, fuzzy +#| msgid "Delete Build Order" +msgid "Select build order" +msgstr "删除生产订单" + +#: stock/serializers.py:93 +#, fuzzy +#| msgid "Selected stock item not found in BOM" +msgid "Select stock item to generate batch code for" +msgstr "在BOM中找不到选定的库存项" + +#: stock/serializers.py:102 +#, fuzzy +#| msgid "Select location where the completed items will be stored" +msgid "Select location to generate batch code for" +msgstr "选择已完成项目仓储地点" + +#: stock/serializers.py:111 +#, fuzzy +#| msgid "User or group responsible for this order" +msgid "Select part to generate batch code for" +msgstr "负责此订单的用户或群组" + +#: stock/serializers.py:120 +#, fuzzy +#| msgid "Create new purchase order" +msgid "Select purchase order" +msgstr "新建采购订单" + +#: stock/serializers.py:127 +#, fuzzy +#| msgid "Enter quantity for build output" +msgid "Enter quantity for batch code" +msgstr "输入生产产出数量" + +#: stock/serializers.py:150 +#, fuzzy +#| msgid "Assigned serial number" +msgid "Generated serial number" +msgstr "已分配序列号" + +#: stock/serializers.py:159 +#, fuzzy +#| msgid "Trackable parts can have serial numbers specified" +msgid "Select part to generate serial number for" +msgstr "可追踪商品可以指定序列号" + +#: stock/serializers.py:167 +#, fuzzy +#| msgid "Enter serial numbers for new items" +msgid "Quantity of serial numbers to generate" +msgstr "输入新项目的序列号" + +#: stock/serializers.py:229 #, fuzzy #| msgid "User or group responsible for this order" msgid "Test template for this result" msgstr "负责此订单的用户或群组" -#: stock/serializers.py:119 +#: stock/serializers.py:248 #, fuzzy #| msgid "Allocation items must be provided" msgid "Template ID or test name must be provided" msgstr "必须提供分配的项" -#: stock/serializers.py:151 +#: stock/serializers.py:280 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:184 +#: stock/serializers.py:313 msgid "Serial number is too large" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:411 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:402 +#: stock/serializers.py:531 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:464 +#: stock/serializers.py:593 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:477 +#: stock/serializers.py:606 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:484 +#: stock/serializers.py:613 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:495 stock/serializers.py:1197 stock/serializers.py:1453 +#: stock/serializers.py:624 stock/serializers.py:1326 stock/serializers.py:1582 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:502 +#: stock/serializers.py:631 msgid "Optional note field" msgstr "" -#: stock/serializers.py:512 +#: stock/serializers.py:641 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:567 +#: stock/serializers.py:696 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:574 +#: stock/serializers.py:703 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:575 +#: stock/serializers.py:704 #, fuzzy #| msgid "Enter quantity for build output" msgid "Enter the quantity of items to install" msgstr "输入生产产出数量" -#: stock/serializers.py:580 stock/serializers.py:660 stock/serializers.py:756 -#: stock/serializers.py:806 +#: stock/serializers.py:709 stock/serializers.py:789 stock/serializers.py:885 +#: stock/serializers.py:935 msgid "Add transaction note (optional)" msgstr "添加交易备注 (可选)" -#: stock/serializers.py:588 +#: stock/serializers.py:717 #, fuzzy #| msgid "Quantity must be a positive number" msgid "Quantity to install must be at least 1" msgstr "数量必须大于0" -#: stock/serializers.py:596 +#: stock/serializers.py:725 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:607 +#: stock/serializers.py:736 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:620 +#: stock/serializers.py:749 #, fuzzy #| msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgid "Quantity to install must not exceed available quantity" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: stock/serializers.py:655 +#: stock/serializers.py:784 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:690 +#: stock/serializers.py:819 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:703 +#: stock/serializers.py:832 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:720 +#: stock/serializers.py:849 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:880 msgid "Destination location for returned item" msgstr "" -#: stock/serializers.py:788 +#: stock/serializers.py:917 #, fuzzy #| msgid "Selected stock item not found in BOM" msgid "Select stock items to change status" msgstr "在BOM中找不到选定的库存项" -#: stock/serializers.py:794 +#: stock/serializers.py:923 #, fuzzy #| msgid "Stock item created" msgid "No stock items selected" msgstr "库存项已创建" -#: stock/serializers.py:890 stock/serializers.py:953 +#: stock/serializers.py:1019 stock/serializers.py:1082 #: stock/templates/stock/location.html:165 -#: stock/templates/stock/location.html:213 +#: stock/templates/stock/location.html:220 #: stock/templates/stock/location_sidebar.html:5 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1069 +#: stock/serializers.py:1198 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1073 +#: stock/serializers.py:1202 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1077 +#: stock/serializers.py:1206 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1101 +#: stock/serializers.py:1230 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1107 +#: stock/serializers.py:1236 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1115 +#: stock/serializers.py:1244 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1125 stock/serializers.py:1379 +#: stock/serializers.py:1254 stock/serializers.py:1508 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1204 +#: stock/serializers.py:1333 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1209 +#: stock/serializers.py:1338 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1210 +#: stock/serializers.py:1339 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1215 +#: stock/serializers.py:1344 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1216 +#: stock/serializers.py:1345 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1226 +#: stock/serializers.py:1355 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1293 +#: stock/serializers.py:1422 #, fuzzy #| msgid "Change" msgid "No Change" msgstr "更改" -#: stock/serializers.py:1322 +#: stock/serializers.py:1451 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1341 +#: stock/serializers.py:1470 #, fuzzy #| msgid "Stock item created" msgid "Stock item status code" msgstr "库存项已创建" -#: stock/serializers.py:1369 +#: stock/serializers.py:1498 msgid "Stock transaction notes" msgstr "" +#: stock/status_codes.py:11 +msgid "OK" +msgstr "OK" + +#: stock/status_codes.py:12 +msgid "Attention needed" +msgstr "需要关注" + +#: stock/status_codes.py:13 +msgid "Damaged" +msgstr "破损" + +#: stock/status_codes.py:14 +msgid "Destroyed" +msgstr "已销毁" + +#: stock/status_codes.py:15 +msgid "Rejected" +msgstr "已拒绝" + +#: stock/status_codes.py:19 +msgid "Quarantined" +msgstr "隔离" + +#: stock/status_codes.py:40 +msgid "Legacy stock tracking entry" +msgstr "旧库存跟踪条目" + +#: stock/status_codes.py:42 templates/js/translated/stock.js:544 +msgid "Stock item created" +msgstr "库存项已创建" + +#: stock/status_codes.py:45 +msgid "Edited stock item" +msgstr "已编辑库存项" + +#: stock/status_codes.py:46 +msgid "Assigned serial number" +msgstr "已分配序列号" + +#: stock/status_codes.py:49 +msgid "Stock counted" +msgstr "库存计数" + +#: stock/status_codes.py:50 +msgid "Stock manually added" +msgstr "已手动添加库存" + +#: stock/status_codes.py:51 +msgid "Stock manually removed" +msgstr "库存手动删除" + +#: stock/status_codes.py:54 +msgid "Location changed" +msgstr "仓储地点已更改" + +#: stock/status_codes.py:55 +#, fuzzy +#| msgid "Stock counted" +msgid "Stock updated" +msgstr "库存计数" + +#: stock/status_codes.py:58 +msgid "Installed into assembly" +msgstr "安装到组装中" + +#: stock/status_codes.py:59 +msgid "Removed from assembly" +msgstr "已从组装中删除" + +#: stock/status_codes.py:61 +msgid "Installed component item" +msgstr "已安装组件项" + +#: stock/status_codes.py:62 +msgid "Removed component item" +msgstr "已删除组件项" + +#: stock/status_codes.py:65 +msgid "Split from parent item" +msgstr "从父项拆分" + +#: stock/status_codes.py:66 +msgid "Split child item" +msgstr "拆分子项" + +#: stock/status_codes.py:69 templates/js/translated/stock.js:1858 +msgid "Merged stock items" +msgstr "合并的库存项目" + +#: stock/status_codes.py:72 +msgid "Converted to variant" +msgstr "转换为变量" + +#: stock/status_codes.py:75 +msgid "Build order output created" +msgstr "已创建生产订单输出" + +#: stock/status_codes.py:76 +msgid "Build order output completed" +msgstr "生产订单输出已完成" + +#: stock/status_codes.py:77 +#, fuzzy +#| msgid "Build order output created" +msgid "Build order output rejected" +msgstr "已创建生产订单输出" + +#: stock/status_codes.py:78 templates/js/translated/stock.js:1764 +msgid "Consumed by build order" +msgstr "被生产订单消耗" + +#: stock/status_codes.py:81 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Shipped against Sales Order" +msgstr "收到定购单" + +#: stock/status_codes.py:84 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Received against Purchase Order" +msgstr "收到定购单" + +#: stock/status_codes.py:87 +#, fuzzy +#| msgid "Received against purchase order" +msgid "Returned against Return Order" +msgstr "收到定购单" + +#: stock/status_codes.py:90 templates/js/translated/table_filters.js:375 +msgid "Sent to customer" +msgstr "发送给客户" + +#: stock/status_codes.py:91 +msgid "Returned from customer" +msgstr "从客户退货" + #: stock/templates/stock/item.html:17 msgid "Stock Tracking Information" msgstr "" @@ -9851,7 +10052,7 @@ msgstr "" msgid "Test Report" msgstr "" -#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:286 +#: stock/templates/stock/item.html:89 stock/templates/stock/item.html:284 msgid "Delete Test Data" msgstr "" @@ -9871,11 +10072,11 @@ msgstr "" msgid "Install Stock Item" msgstr "" -#: stock/templates/stock/item.html:274 +#: stock/templates/stock/item.html:272 msgid "Delete all test results for this stock item" msgstr "" -#: stock/templates/stock/item.html:304 templates/js/translated/stock.js:1698 +#: stock/templates/stock/item.html:302 templates/js/translated/stock.js:1701 msgid "Add Test Result" msgstr "" @@ -9898,17 +10099,17 @@ msgid "Stock adjustment actions" msgstr "" #: stock/templates/stock/item_base.html:79 -#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1821 +#: stock/templates/stock/location.html:90 templates/js/translated/stock.js:1824 msgid "Count stock" msgstr "" #: stock/templates/stock/item_base.html:81 -#: templates/js/translated/stock.js:1803 +#: templates/js/translated/stock.js:1806 msgid "Add stock" msgstr "" #: stock/templates/stock/item_base.html:82 -#: templates/js/translated/stock.js:1812 +#: templates/js/translated/stock.js:1815 msgid "Remove stock" msgstr "" @@ -9917,12 +10118,12 @@ msgid "Serialize stock" msgstr "" #: stock/templates/stock/item_base.html:88 -#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1830 +#: stock/templates/stock/location.html:96 templates/js/translated/stock.js:1833 msgid "Transfer stock" msgstr "" #: stock/templates/stock/item_base.html:91 -#: templates/js/translated/stock.js:1884 +#: templates/js/translated/stock.js:1887 msgid "Assign to customer" msgstr "" @@ -9963,7 +10164,7 @@ msgid "Delete stock item" msgstr "" #: stock/templates/stock/item_base.html:169 templates/InvenTree/search.html:139 -#: templates/js/translated/build.js:2121 templates/navbar.html:38 +#: templates/js/translated/build.js:2123 templates/navbar.html:38 msgid "Build" msgstr "生产" @@ -10031,7 +10232,7 @@ msgid "Available Quantity" msgstr "" #: stock/templates/stock/item_base.html:398 -#: templates/js/translated/build.js:2378 +#: templates/js/translated/build.js:2380 msgid "No location set" msgstr "未设置仓储地点" @@ -10062,42 +10263,42 @@ msgstr "" msgid "No stocktake performed" msgstr "" -#: stock/templates/stock/item_base.html:507 -#: templates/js/translated/stock.js:1951 +#: stock/templates/stock/item_base.html:504 +#: templates/js/translated/stock.js:1952 #, fuzzy #| msgid "Stock Item" msgid "stock item" msgstr "库存项" -#: stock/templates/stock/item_base.html:532 +#: stock/templates/stock/item_base.html:527 msgid "Edit Stock Status" msgstr "" -#: stock/templates/stock/item_base.html:541 +#: stock/templates/stock/item_base.html:536 msgid "Stock Item QR Code" msgstr "" -#: stock/templates/stock/item_base.html:552 +#: stock/templates/stock/item_base.html:547 msgid "Link Barcode to Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:616 +#: stock/templates/stock/item_base.html:611 msgid "Select one of the part variants listed below." msgstr "" -#: stock/templates/stock/item_base.html:619 +#: stock/templates/stock/item_base.html:614 msgid "Warning" msgstr "警告" -#: stock/templates/stock/item_base.html:620 +#: stock/templates/stock/item_base.html:615 msgid "This action cannot be easily undone" msgstr "" -#: stock/templates/stock/item_base.html:628 +#: stock/templates/stock/item_base.html:623 msgid "Convert Stock Item" msgstr "" -#: stock/templates/stock/item_base.html:662 +#: stock/templates/stock/item_base.html:657 msgid "Return to Stock" msgstr "" @@ -10163,30 +10364,36 @@ msgstr "" msgid "You are not in the list of owners of this location. This stock location cannot be edited." msgstr "您不在此仓储地的所有者列表中,无法编辑此仓储地。" -#: stock/templates/stock/location.html:217 +#: stock/templates/stock/location.html:176 +#, fuzzy +#| msgid "Location" +msgid "Location Type" +msgstr "地点" + +#: stock/templates/stock/location.html:224 msgid "Create new stock location" msgstr "新建仓储地点" -#: stock/templates/stock/location.html:218 +#: stock/templates/stock/location.html:225 msgid "New Location" msgstr "新建仓储地点" -#: stock/templates/stock/location.html:287 +#: stock/templates/stock/location.html:295 #: templates/js/translated/stock.js:2572 #, fuzzy #| msgid "Stock Location" msgid "stock location" msgstr "仓储地点" -#: stock/templates/stock/location.html:315 +#: stock/templates/stock/location.html:317 msgid "Scanned stock container into this location" msgstr "" -#: stock/templates/stock/location.html:388 +#: stock/templates/stock/location.html:390 msgid "Stock Location QR Code" msgstr "" -#: stock/templates/stock/location.html:399 +#: stock/templates/stock/location.html:401 msgid "Link Barcode to Stock Location" msgstr "" @@ -10412,12 +10619,12 @@ msgstr "" msgid "Outgoing email has not been configured. Some login and sign-up features may not work correctly!" msgstr "" -#: templates/InvenTree/settings/login.html:25 templates/account/signup.html:5 +#: templates/InvenTree/settings/login.html:27 templates/account/signup.html:5 #: templates/socialaccount/signup.html:5 msgid "Signup" msgstr "" -#: templates/InvenTree/settings/login.html:34 +#: templates/InvenTree/settings/login.html:36 msgid "Single Sign On" msgstr "" @@ -10456,11 +10663,11 @@ msgstr "" msgid "Part Settings" msgstr "商品设置" -#: templates/InvenTree/settings/part.html:42 +#: templates/InvenTree/settings/part.html:43 msgid "Part Import" msgstr "商品导入" -#: templates/InvenTree/settings/part.html:46 +#: templates/InvenTree/settings/part.html:47 msgid "Import Part" msgstr "导入商品" @@ -10498,38 +10705,38 @@ msgstr "" msgid "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." msgstr "" -#: templates/InvenTree/settings/plugin.html:36 +#: templates/InvenTree/settings/plugin.html:38 #: templates/InvenTree/settings/sidebar.html:66 msgid "Plugins" msgstr "" -#: templates/InvenTree/settings/plugin.html:42 -#: templates/InvenTree/settings/plugin.html:43 +#: templates/InvenTree/settings/plugin.html:44 +#: templates/InvenTree/settings/plugin.html:45 #: templates/js/translated/plugin.js:151 msgid "Install Plugin" msgstr "" -#: templates/InvenTree/settings/plugin.html:45 -#: templates/InvenTree/settings/plugin.html:46 +#: templates/InvenTree/settings/plugin.html:47 +#: templates/InvenTree/settings/plugin.html:48 #: templates/js/translated/plugin.js:224 #, fuzzy #| msgid "Subcategories" msgid "Reload Plugins" msgstr "子类别" -#: templates/InvenTree/settings/plugin.html:56 +#: templates/InvenTree/settings/plugin.html:58 msgid "External plugins are not enabled for this InvenTree installation" msgstr "" -#: templates/InvenTree/settings/plugin.html:71 +#: templates/InvenTree/settings/plugin.html:73 msgid "Plugin Error Stack" msgstr "" -#: templates/InvenTree/settings/plugin.html:80 +#: templates/InvenTree/settings/plugin.html:82 msgid "Stage" msgstr "" -#: templates/InvenTree/settings/plugin.html:82 +#: templates/InvenTree/settings/plugin.html:84 #: templates/js/translated/notification.js:76 msgid "Message" msgstr "" @@ -10695,7 +10902,7 @@ msgstr "" #: templates/InvenTree/settings/settings_staff_js.html:81 #: templates/js/translated/forms.js:547 templates/js/translated/helpers.js:105 #: templates/js/translated/part.js:392 templates/js/translated/pricing.js:629 -#: templates/js/translated/stock.js:245 users/models.py:424 +#: templates/js/translated/stock.js:245 users/models.py:411 msgid "Delete" msgstr "删除" @@ -10724,7 +10931,7 @@ msgid "No project codes found" msgstr "无指定参数" #: templates/InvenTree/settings/settings_staff_js.html:158 -#: templates/js/translated/build.js:2226 +#: templates/js/translated/build.js:2228 msgid "group" msgstr "" @@ -10806,7 +11013,7 @@ msgid "Delete Location Type" msgstr "删除仓储地" #: templates/InvenTree/settings/settings_staff_js.html:500 -#: templates/InvenTree/settings/stock.html:37 +#: templates/InvenTree/settings/stock.html:38 #, fuzzy #| msgid "New Location" msgid "New Location Type" @@ -10832,7 +11039,7 @@ msgid "Home Page" msgstr "" #: templates/InvenTree/settings/sidebar.html:15 -#: templates/js/translated/forms.js:2159 templates/js/translated/tables.js:543 +#: templates/js/translated/forms.js:2167 templates/js/translated/tables.js:543 #: templates/navbar.html:107 templates/search.html:8 #: templates/search_form.html:6 templates/search_form.html:7 msgid "Search" @@ -10869,7 +11076,7 @@ msgstr "销售订单设置" msgid "Stock Settings" msgstr "库存设置" -#: templates/InvenTree/settings/stock.html:33 +#: templates/InvenTree/settings/stock.html:34 #, fuzzy #| msgid "Stock Locations" msgid "Stock Location Types" @@ -10970,49 +11177,49 @@ msgstr "" msgid "Remove multifactor" msgstr "" -#: templates/InvenTree/settings/user.html:168 +#: templates/InvenTree/settings/user.html:171 msgid "Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:174 +#: templates/InvenTree/settings/user.html:177 msgid "Log out active sessions (except this one)" msgstr "" -#: templates/InvenTree/settings/user.html:175 +#: templates/InvenTree/settings/user.html:178 msgid "Log Out Active Sessions" msgstr "" -#: templates/InvenTree/settings/user.html:184 +#: templates/InvenTree/settings/user.html:187 msgid "unknown on unknown" msgstr "" -#: templates/InvenTree/settings/user.html:185 +#: templates/InvenTree/settings/user.html:188 msgid "unknown" msgstr "" -#: templates/InvenTree/settings/user.html:189 +#: templates/InvenTree/settings/user.html:192 msgid "IP Address" msgstr "" -#: templates/InvenTree/settings/user.html:190 +#: templates/InvenTree/settings/user.html:193 msgid "Device" msgstr "" -#: templates/InvenTree/settings/user.html:191 +#: templates/InvenTree/settings/user.html:194 msgid "Last Activity" msgstr "" -#: templates/InvenTree/settings/user.html:204 +#: templates/InvenTree/settings/user.html:207 #, python-format msgid "%(time)s ago (this session)" msgstr "" -#: templates/InvenTree/settings/user.html:206 +#: templates/InvenTree/settings/user.html:209 #, python-format msgid "%(time)s ago" msgstr "" -#: templates/InvenTree/settings/user.html:218 +#: templates/InvenTree/settings/user.html:223 msgid "Do you really want to remove the selected email address?" msgstr "" @@ -11197,26 +11404,26 @@ msgstr "确认" msgid "This email confirmation link expired or is invalid. Please issue a new email confirmation request." msgstr "" -#: templates/account/login.html:6 templates/account/login.html:17 -#: templates/account/login.html:38 templates/socialaccount/login.html:5 +#: templates/account/login.html:6 templates/account/login.html:19 +#: templates/account/login.html:40 templates/socialaccount/login.html:5 msgid "Sign In" msgstr "" -#: templates/account/login.html:21 +#: templates/account/login.html:23 msgid "Not a member?" msgstr "" -#: templates/account/login.html:23 templates/account/signup.html:11 +#: templates/account/login.html:25 templates/account/signup.html:11 #: templates/account/signup.html:22 templates/socialaccount/signup.html:8 #: templates/socialaccount/signup.html:23 msgid "Sign Up" msgstr "" -#: templates/account/login.html:45 +#: templates/account/login.html:47 msgid "Forgot Password?" msgstr "" -#: templates/account/login.html:53 +#: templates/account/login.html:55 msgid "or log in with" msgstr "" @@ -11417,7 +11624,7 @@ msgid "The following parts are low on required stock" msgstr "" #: templates/email/build_order_required_stock.html:18 -#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2557 +#: templates/js/translated/bom.js:1674 templates/js/translated/build.js:2556 msgid "Required Quantity" msgstr "" @@ -11431,7 +11638,7 @@ msgid "Click on the following link to view this part" msgstr "" #: templates/email/low_stock_notification.html:18 -#: templates/js/translated/part.js:3218 +#: templates/js/translated/part.js:3217 msgid "Minimum Quantity" msgstr "" @@ -11602,7 +11809,7 @@ msgstr "" msgid "Unlink" msgstr "" -#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1155 +#: templates/js/translated/barcode.js:567 templates/js/translated/stock.js:1158 msgid "Remove stock item" msgstr "" @@ -11794,7 +12001,7 @@ msgstr "" msgid "Substitutes Available" msgstr "" -#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2501 +#: templates/js/translated/bom.js:950 templates/js/translated/build.js:2500 msgid "Variant stock allowed" msgstr "" @@ -11814,32 +12021,32 @@ msgstr "" msgid "No pricing available" msgstr "" -#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2622 +#: templates/js/translated/bom.js:1184 templates/js/translated/build.js:2621 #, fuzzy #| msgid "External Link" msgid "External stock" msgstr "外部链接" -#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2596 -#: templates/js/translated/sales_order.js:1910 +#: templates/js/translated/bom.js:1188 templates/js/translated/build.js:2595 +#: templates/js/translated/sales_order.js:1946 msgid "No Stock Available" msgstr "" -#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2600 +#: templates/js/translated/bom.js:1193 templates/js/translated/build.js:2599 msgid "Includes variant and substitute stock" msgstr "" -#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2602 +#: templates/js/translated/bom.js:1195 templates/js/translated/build.js:2601 #: templates/js/translated/part.js:1256 -#: templates/js/translated/sales_order.js:1907 +#: templates/js/translated/sales_order.js:1943 msgid "Includes variant stock" msgstr "" -#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2604 +#: templates/js/translated/bom.js:1197 templates/js/translated/build.js:2603 msgid "Includes substitute stock" msgstr "" -#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2587 +#: templates/js/translated/bom.js:1225 templates/js/translated/build.js:2586 msgid "Consumable item" msgstr "" @@ -11871,7 +12078,7 @@ msgstr "" msgid "No BOM items found" msgstr "" -#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2486 +#: templates/js/translated/bom.js:1657 templates/js/translated/build.js:2485 msgid "Required Part" msgstr "" @@ -12064,231 +12271,231 @@ msgstr "" msgid "No build order allocations found" msgstr "" -#: templates/js/translated/build.js:989 templates/js/translated/build.js:2342 +#: templates/js/translated/build.js:991 templates/js/translated/build.js:2344 #, fuzzy #| msgid "Allocated Parts" msgid "Allocated Quantity" msgstr "已分配的部件" -#: templates/js/translated/build.js:1003 +#: templates/js/translated/build.js:1005 msgid "Location not specified" msgstr "未指定仓储地点" -#: templates/js/translated/build.js:1025 +#: templates/js/translated/build.js:1027 msgid "Complete outputs" msgstr "已完成输出" -#: templates/js/translated/build.js:1043 +#: templates/js/translated/build.js:1045 #, fuzzy #| msgid "Complete outputs" msgid "Scrap outputs" msgstr "已完成输出" -#: templates/js/translated/build.js:1061 +#: templates/js/translated/build.js:1063 msgid "Delete outputs" msgstr "删除输出" -#: templates/js/translated/build.js:1115 +#: templates/js/translated/build.js:1116 #, fuzzy #| msgid "Build output" msgid "build output" msgstr "生产产出" -#: templates/js/translated/build.js:1116 +#: templates/js/translated/build.js:1117 #, fuzzy #| msgid "Build output" msgid "build outputs" msgstr "生产产出" -#: templates/js/translated/build.js:1120 +#: templates/js/translated/build.js:1121 #, fuzzy #| msgid "Build actions" msgid "Build output actions" msgstr "生产操作" -#: templates/js/translated/build.js:1294 +#: templates/js/translated/build.js:1297 msgid "No active build outputs found" msgstr "" -#: templates/js/translated/build.js:1387 +#: templates/js/translated/build.js:1390 #, fuzzy #| msgid "Allocated Parts" msgid "Allocated Lines" msgstr "已分配的部件" -#: templates/js/translated/build.js:1401 +#: templates/js/translated/build.js:1404 msgid "Required Tests" msgstr "" -#: templates/js/translated/build.js:1573 +#: templates/js/translated/build.js:1576 #: templates/js/translated/purchase_order.js:611 -#: templates/js/translated/sales_order.js:1171 +#: templates/js/translated/sales_order.js:1207 msgid "Select Parts" msgstr "选择商品" -#: templates/js/translated/build.js:1574 -#: templates/js/translated/sales_order.js:1172 +#: templates/js/translated/build.js:1577 +#: templates/js/translated/sales_order.js:1208 msgid "You must select at least one part to allocate" msgstr "" -#: templates/js/translated/build.js:1637 -#: templates/js/translated/sales_order.js:1121 +#: templates/js/translated/build.js:1640 +#: templates/js/translated/sales_order.js:1157 msgid "Specify stock allocation quantity" msgstr "" -#: templates/js/translated/build.js:1714 +#: templates/js/translated/build.js:1717 msgid "All Parts Allocated" msgstr "" -#: templates/js/translated/build.js:1715 +#: templates/js/translated/build.js:1718 msgid "All selected parts have been fully allocated" msgstr "" -#: templates/js/translated/build.js:1729 -#: templates/js/translated/sales_order.js:1186 +#: templates/js/translated/build.js:1732 +#: templates/js/translated/sales_order.js:1222 msgid "Select source location (leave blank to take from all locations)" msgstr "" -#: templates/js/translated/build.js:1757 +#: templates/js/translated/build.js:1760 msgid "Allocate Stock Items to Build Order" msgstr "" -#: templates/js/translated/build.js:1768 -#: templates/js/translated/sales_order.js:1283 +#: templates/js/translated/build.js:1771 +#: templates/js/translated/sales_order.js:1319 msgid "No matching stock locations" msgstr "" -#: templates/js/translated/build.js:1841 -#: templates/js/translated/sales_order.js:1362 +#: templates/js/translated/build.js:1844 +#: templates/js/translated/sales_order.js:1398 msgid "No matching stock items" msgstr "" -#: templates/js/translated/build.js:1938 +#: templates/js/translated/build.js:1941 msgid "Automatic Stock Allocation" msgstr "" -#: templates/js/translated/build.js:1939 +#: templates/js/translated/build.js:1942 msgid "Stock items will be automatically allocated to this build order, according to the provided guidelines" msgstr "" -#: templates/js/translated/build.js:1941 +#: templates/js/translated/build.js:1944 msgid "If a location is specified, stock will only be allocated from that location" msgstr "" -#: templates/js/translated/build.js:1942 +#: templates/js/translated/build.js:1945 msgid "If stock is considered interchangeable, it will be allocated from the first location it is found" msgstr "" -#: templates/js/translated/build.js:1943 +#: templates/js/translated/build.js:1946 msgid "If substitute stock is allowed, it will be used where stock of the primary part cannot be found" msgstr "" -#: templates/js/translated/build.js:1974 +#: templates/js/translated/build.js:1977 msgid "Allocate Stock Items" msgstr "" -#: templates/js/translated/build.js:2080 +#: templates/js/translated/build.js:2082 msgid "No builds matching query" msgstr "" -#: templates/js/translated/build.js:2115 templates/js/translated/build.js:2480 -#: templates/js/translated/forms.js:2155 templates/js/translated/forms.js:2171 -#: templates/js/translated/part.js:2316 templates/js/translated/part.js:2742 -#: templates/js/translated/stock.js:1982 templates/js/translated/stock.js:2710 +#: templates/js/translated/build.js:2117 templates/js/translated/build.js:2479 +#: templates/js/translated/forms.js:2163 templates/js/translated/forms.js:2179 +#: templates/js/translated/part.js:2315 templates/js/translated/part.js:2741 +#: templates/js/translated/stock.js:1983 templates/js/translated/stock.js:2710 msgid "Select" msgstr "" -#: templates/js/translated/build.js:2129 +#: templates/js/translated/build.js:2131 msgid "Build order is overdue" msgstr "" -#: templates/js/translated/build.js:2175 -msgid "Progress" -msgstr "" - -#: templates/js/translated/build.js:2211 templates/js/translated/stock.js:3042 +#: templates/js/translated/build.js:2213 templates/js/translated/stock.js:3042 msgid "No user information" msgstr "没有用户信息" -#: templates/js/translated/build.js:2387 -#: templates/js/translated/sales_order.js:1646 +#: templates/js/translated/build.js:2389 +#: templates/js/translated/sales_order.js:1682 msgid "Edit stock allocation" msgstr "" -#: templates/js/translated/build.js:2388 -#: templates/js/translated/sales_order.js:1647 +#: templates/js/translated/build.js:2390 +#: templates/js/translated/sales_order.js:1683 msgid "Delete stock allocation" msgstr "" -#: templates/js/translated/build.js:2403 +#: templates/js/translated/build.js:2405 msgid "Edit Allocation" msgstr "" -#: templates/js/translated/build.js:2415 +#: templates/js/translated/build.js:2417 msgid "Remove Allocation" msgstr "" -#: templates/js/translated/build.js:2456 +#: templates/js/translated/build.js:2455 #, fuzzy #| msgid "Build actions" msgid "build line" msgstr "生产操作" -#: templates/js/translated/build.js:2457 +#: templates/js/translated/build.js:2456 #, fuzzy #| msgid "Build actions" msgid "build lines" msgstr "生产操作" -#: templates/js/translated/build.js:2475 +#: templates/js/translated/build.js:2474 #, fuzzy #| msgid "Subcategories" msgid "No build lines found" msgstr "子类别" -#: templates/js/translated/build.js:2505 templates/js/translated/part.js:790 +#: templates/js/translated/build.js:2504 templates/js/translated/part.js:790 #: templates/js/translated/part.js:1202 msgid "Trackable part" msgstr "可追溯商品" -#: templates/js/translated/build.js:2540 +#: templates/js/translated/build.js:2539 #, fuzzy #| msgid "Quantity" msgid "Unit Quantity" msgstr "数量" -#: templates/js/translated/build.js:2592 -#: templates/js/translated/sales_order.js:1915 +#: templates/js/translated/build.js:2591 +#: templates/js/translated/sales_order.js:1951 msgid "Sufficient stock available" msgstr "" -#: templates/js/translated/build.js:2647 +#: templates/js/translated/build.js:2646 #, fuzzy #| msgid "Minimum Stock" msgid "Consumable Item" msgstr "最低库存" -#: templates/js/translated/build.js:2652 +#: templates/js/translated/build.js:2653 #, fuzzy #| msgid "Stock Item" msgid "Tracked item" msgstr "库存项" -#: templates/js/translated/build.js:2659 -#: templates/js/translated/sales_order.js:2016 +#: templates/js/translated/build.js:2654 +msgid "Allocate tracked items against individual build outputs" +msgstr "" + +#: templates/js/translated/build.js:2662 +#: templates/js/translated/sales_order.js:2052 msgid "Build stock" msgstr "" -#: templates/js/translated/build.js:2664 templates/js/translated/stock.js:1865 +#: templates/js/translated/build.js:2667 templates/js/translated/stock.js:1868 msgid "Order stock" msgstr "" -#: templates/js/translated/build.js:2668 -#: templates/js/translated/sales_order.js:2010 +#: templates/js/translated/build.js:2671 +#: templates/js/translated/sales_order.js:2046 msgid "Allocate stock" msgstr "" -#: templates/js/translated/build.js:2672 +#: templates/js/translated/build.js:2675 #, fuzzy #| msgid "Confirm stock allocation" msgid "Remove stock allocation" @@ -12572,12 +12779,12 @@ msgid "Delete price break" msgstr "" #: templates/js/translated/filters.js:186 -#: templates/js/translated/filters.js:672 +#: templates/js/translated/filters.js:667 msgid "true" msgstr "" #: templates/js/translated/filters.js:190 -#: templates/js/translated/filters.js:673 +#: templates/js/translated/filters.js:668 msgid "false" msgstr "" @@ -12613,7 +12820,7 @@ msgstr "" msgid "Clear all filters" msgstr "" -#: templates/js/translated/filters.js:582 +#: templates/js/translated/filters.js:577 msgid "Create filter" msgstr "" @@ -12646,32 +12853,32 @@ msgstr "" msgid "Enter a valid number" msgstr "" -#: templates/js/translated/forms.js:1473 templates/modals.html:19 +#: templates/js/translated/forms.js:1477 templates/modals.html:19 #: templates/modals.html:43 msgid "Form errors exist" msgstr "" -#: templates/js/translated/forms.js:1971 +#: templates/js/translated/forms.js:1975 msgid "No results found" msgstr "" -#: templates/js/translated/forms.js:2275 templates/js/translated/search.js:239 +#: templates/js/translated/forms.js:2285 templates/js/translated/search.js:239 msgid "Searching" msgstr "" -#: templates/js/translated/forms.js:2489 +#: templates/js/translated/forms.js:2499 msgid "Clear input" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "File Column" msgstr "" -#: templates/js/translated/forms.js:3091 +#: templates/js/translated/forms.js:3101 msgid "Field Name" msgstr "" -#: templates/js/translated/forms.js:3103 +#: templates/js/translated/forms.js:3113 msgid "Select Columns" msgstr "" @@ -12697,69 +12904,19 @@ msgstr "" msgid "No parts required for builds" msgstr "生产订单所需的库存" -#: templates/js/translated/label.js:53 templates/js/translated/report.js:123 +#: templates/js/translated/label.js:55 templates/js/translated/report.js:38 #, fuzzy #| msgid "Select Stock Items" msgid "Select Items" msgstr "选择库存项" -#: templates/js/translated/label.js:54 +#: templates/js/translated/label.js:56 templates/js/translated/report.js:39 #, fuzzy #| msgid "Stock item(s) must be selected before printing labels" msgid "No items selected for printing" msgstr "打印标签前必须选择库存项目" -#: templates/js/translated/label.js:72 -msgid "No Labels Found" -msgstr "未找到标签" - -#: templates/js/translated/label.js:73 -#, fuzzy -#| msgid "No labels found which match the selected part(s)" -msgid "No label templates found which match the selected items" -msgstr "没有找到与所选商品相匹配的标签" - -#: templates/js/translated/label.js:97 -#, fuzzy -#| msgid "Rejected" -msgid "selected" -msgstr "已拒绝" - -#: templates/js/translated/label.js:133 -#, fuzzy -#| msgid "Print actions" -msgid "Printing Options" -msgstr "打印操作" - -#: templates/js/translated/label.js:148 -#, fuzzy -#| msgid "Print labels" -msgid "Print label" -msgstr "打印标签" - -#: templates/js/translated/label.js:148 -msgid "Print labels" -msgstr "打印标签" - -#: templates/js/translated/label.js:149 -#, fuzzy -#| msgid "Print Label" -msgid "Print" -msgstr "打印标签" - -#: templates/js/translated/label.js:155 -#, fuzzy -#| msgid "Select Label Template" -msgid "Select label template" -msgstr "选择标签模板" - -#: templates/js/translated/label.js:168 -#, fuzzy -#| msgid "Select supplier" -msgid "Select plugin" -msgstr "选择供应商" - -#: templates/js/translated/label.js:187 +#: templates/js/translated/label.js:150 msgid "Labels sent to printer" msgstr "" @@ -12877,7 +13034,7 @@ msgid "Delete Line" msgstr "" #: templates/js/translated/order.js:281 -#: templates/js/translated/purchase_order.js:1991 +#: templates/js/translated/purchase_order.js:1990 msgid "No line items found" msgstr "" @@ -13119,19 +13276,19 @@ msgid "Delete Part Parameter Template" msgstr "" #: templates/js/translated/part.js:1716 -#: templates/js/translated/purchase_order.js:1655 +#: templates/js/translated/purchase_order.js:1654 msgid "No purchase orders found" msgstr "" #: templates/js/translated/part.js:1860 -#: templates/js/translated/purchase_order.js:2154 -#: templates/js/translated/return_order.js:756 -#: templates/js/translated/sales_order.js:1875 +#: templates/js/translated/purchase_order.js:2153 +#: templates/js/translated/return_order.js:755 +#: templates/js/translated/sales_order.js:1911 msgid "This line item is overdue" msgstr "" #: templates/js/translated/part.js:1906 -#: templates/js/translated/purchase_order.js:2221 +#: templates/js/translated/purchase_order.js:2220 msgid "Receive line item" msgstr "" @@ -13143,7 +13300,7 @@ msgstr "" msgid "Delete Part Relationship" msgstr "" -#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2506 +#: templates/js/translated/part.js:2079 templates/js/translated/part.js:2505 msgid "No parts found" msgstr "" @@ -13159,107 +13316,107 @@ msgstr "设置商品类别" msgid "Set category" msgstr "设置类别" -#: templates/js/translated/part.js:2287 +#: templates/js/translated/part.js:2286 #, fuzzy #| msgid "Edit part" msgid "part" msgstr "编辑商品" -#: templates/js/translated/part.js:2288 +#: templates/js/translated/part.js:2287 #, fuzzy #| msgid "Parts" msgid "parts" msgstr "商品" -#: templates/js/translated/part.js:2384 +#: templates/js/translated/part.js:2383 msgid "No category" msgstr "没有分类" -#: templates/js/translated/part.js:2531 templates/js/translated/part.js:2661 +#: templates/js/translated/part.js:2530 templates/js/translated/part.js:2660 #: templates/js/translated/stock.js:2669 msgid "Display as list" msgstr "" -#: templates/js/translated/part.js:2547 +#: templates/js/translated/part.js:2546 msgid "Display as grid" msgstr "" -#: templates/js/translated/part.js:2645 +#: templates/js/translated/part.js:2644 #, fuzzy #| msgid "Subcategories" msgid "No subcategories found" msgstr "子类别" -#: templates/js/translated/part.js:2681 templates/js/translated/stock.js:2689 +#: templates/js/translated/part.js:2680 templates/js/translated/stock.js:2689 msgid "Display as tree" msgstr "" -#: templates/js/translated/part.js:2761 +#: templates/js/translated/part.js:2760 msgid "Load Subcategories" msgstr "" -#: templates/js/translated/part.js:2777 +#: templates/js/translated/part.js:2776 msgid "Subscribed category" msgstr "" -#: templates/js/translated/part.js:2864 +#: templates/js/translated/part.js:2863 msgid "No test templates matching query" msgstr "" -#: templates/js/translated/part.js:2886 templates/js/translated/search.js:342 +#: templates/js/translated/part.js:2885 templates/js/translated/search.js:342 msgid "results" msgstr "" -#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1453 +#: templates/js/translated/part.js:2935 templates/js/translated/stock.js:1456 msgid "Edit test result" msgstr "" -#: templates/js/translated/part.js:2937 templates/js/translated/stock.js:1454 -#: templates/js/translated/stock.js:1728 +#: templates/js/translated/part.js:2936 templates/js/translated/stock.js:1457 +#: templates/js/translated/stock.js:1731 msgid "Delete test result" msgstr "" -#: templates/js/translated/part.js:2941 +#: templates/js/translated/part.js:2940 msgid "This test is defined for a parent part" msgstr "" -#: templates/js/translated/part.js:2957 +#: templates/js/translated/part.js:2956 msgid "Edit Test Result Template" msgstr "" -#: templates/js/translated/part.js:2971 +#: templates/js/translated/part.js:2970 msgid "Delete Test Result Template" msgstr "" -#: templates/js/translated/part.js:3050 templates/js/translated/part.js:3051 +#: templates/js/translated/part.js:3049 templates/js/translated/part.js:3050 msgid "No date specified" msgstr "" -#: templates/js/translated/part.js:3053 +#: templates/js/translated/part.js:3052 msgid "Specified date is in the past" msgstr "" -#: templates/js/translated/part.js:3059 +#: templates/js/translated/part.js:3058 msgid "Speculative" msgstr "" -#: templates/js/translated/part.js:3109 +#: templates/js/translated/part.js:3108 msgid "No scheduling information available for this part" msgstr "" -#: templates/js/translated/part.js:3115 +#: templates/js/translated/part.js:3114 msgid "Error fetching scheduling information for this part" msgstr "" -#: templates/js/translated/part.js:3211 +#: templates/js/translated/part.js:3210 msgid "Scheduled Stock Quantities" msgstr "" -#: templates/js/translated/part.js:3227 +#: templates/js/translated/part.js:3226 msgid "Maximum Quantity" msgstr "" -#: templates/js/translated/part.js:3272 +#: templates/js/translated/part.js:3271 msgid "Minimum Stock Level" msgstr "" @@ -13401,7 +13558,7 @@ msgstr "" #: templates/js/translated/purchase_order.js:448 #: templates/js/translated/return_order.js:210 -#: templates/js/translated/sales_order.js:500 +#: templates/js/translated/sales_order.js:552 msgid "Mark this order as complete?" msgstr "" @@ -13414,7 +13571,6 @@ msgid "This order has line items which have not been marked as received." msgstr "" #: templates/js/translated/purchase_order.js:460 -#: templates/js/translated/sales_order.js:514 msgid "Completing this order means that the order and line items will no longer be editable." msgstr "" @@ -13472,12 +13628,12 @@ msgid "No matching purchase orders" msgstr "" #: templates/js/translated/purchase_order.js:1073 -#: templates/js/translated/return_order.js:491 +#: templates/js/translated/return_order.js:490 msgid "Select Line Items" msgstr "" #: templates/js/translated/purchase_order.js:1074 -#: templates/js/translated/return_order.js:492 +#: templates/js/translated/return_order.js:491 msgid "At least one line item must be selected" msgstr "" @@ -13534,7 +13690,7 @@ msgid "Quantity to Receive" msgstr "" #: templates/js/translated/purchase_order.js:1333 -#: templates/js/translated/return_order.js:561 +#: templates/js/translated/return_order.js:560 msgid "Confirm receipt of items" msgstr "" @@ -13558,88 +13714,77 @@ msgstr "" msgid "Invalid barcode data" msgstr "输入条形码数据" -#: templates/js/translated/purchase_order.js:1682 -#: templates/js/translated/return_order.js:286 -#: templates/js/translated/sales_order.js:774 -#: templates/js/translated/sales_order.js:998 +#: templates/js/translated/purchase_order.js:1681 +#: templates/js/translated/return_order.js:285 +#: templates/js/translated/sales_order.js:810 +#: templates/js/translated/sales_order.js:1034 msgid "Order is overdue" msgstr "" -#: templates/js/translated/purchase_order.js:1748 -#: templates/js/translated/return_order.js:354 -#: templates/js/translated/sales_order.js:851 -#: templates/js/translated/sales_order.js:1011 -msgid "Items" -msgstr "" - -#: templates/js/translated/purchase_order.js:1844 +#: templates/js/translated/purchase_order.js:1843 #, fuzzy #| msgid "All selected supplier parts will be deleted" msgid "All selected Line items will be deleted" msgstr "删除所有选定的供应商商品" -#: templates/js/translated/purchase_order.js:1862 +#: templates/js/translated/purchase_order.js:1861 #, fuzzy #| msgid "Allocate selected items" msgid "Delete selected Line items?" msgstr "分配选定项目" -#: templates/js/translated/purchase_order.js:1917 -#: templates/js/translated/sales_order.js:2070 +#: templates/js/translated/purchase_order.js:1916 +#: templates/js/translated/sales_order.js:2106 msgid "Duplicate Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1932 -#: templates/js/translated/return_order.js:476 -#: templates/js/translated/return_order.js:669 -#: templates/js/translated/sales_order.js:2083 +#: templates/js/translated/purchase_order.js:1931 +#: templates/js/translated/return_order.js:475 +#: templates/js/translated/return_order.js:668 +#: templates/js/translated/sales_order.js:2119 msgid "Edit Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:1943 -#: templates/js/translated/return_order.js:682 -#: templates/js/translated/sales_order.js:2094 +#: templates/js/translated/purchase_order.js:1942 +#: templates/js/translated/return_order.js:681 +#: templates/js/translated/sales_order.js:2130 msgid "Delete Line Item" msgstr "" -#: templates/js/translated/purchase_order.js:2225 -#: templates/js/translated/sales_order.js:2024 +#: templates/js/translated/purchase_order.js:2224 +#: templates/js/translated/sales_order.js:2060 msgid "Duplicate line item" msgstr "" -#: templates/js/translated/purchase_order.js:2226 -#: templates/js/translated/return_order.js:801 -#: templates/js/translated/sales_order.js:2025 +#: templates/js/translated/purchase_order.js:2225 +#: templates/js/translated/return_order.js:800 +#: templates/js/translated/sales_order.js:2061 msgid "Edit line item" msgstr "" -#: templates/js/translated/purchase_order.js:2227 -#: templates/js/translated/return_order.js:805 -#: templates/js/translated/sales_order.js:2031 +#: templates/js/translated/purchase_order.js:2226 +#: templates/js/translated/return_order.js:804 +#: templates/js/translated/sales_order.js:2067 msgid "Delete line item" msgstr "" -#: templates/js/translated/report.js:63 -msgid "items selected" -msgstr "" - -#: templates/js/translated/report.js:71 -msgid "Select Report Template" -msgstr "" - -#: templates/js/translated/report.js:86 -msgid "Select Test Report Template" -msgstr "" - -#: templates/js/translated/report.js:140 -msgid "No Reports Found" -msgstr "没有找到报表" - -#: templates/js/translated/report.js:141 +#: templates/js/translated/report.js:49 #, fuzzy -#| msgid "No labels found which match the selected part(s)" -msgid "No report templates found which match the selected items" -msgstr "没有找到与所选商品相匹配的标签" +#| msgid "Print Order Reports" +msgid "Print Report" +msgstr "打印订单报表" + +#: templates/js/translated/report.js:68 +#, fuzzy +#| msgid "Installed into assembly" +msgid "Report print successful" +msgstr "安装到组装中" + +#: templates/js/translated/report.js:73 +#, fuzzy +#| msgid "Error renaming file" +msgid "Report printing failed" +msgstr "重命名文件出错" #: templates/js/translated/return_order.js:60 #: templates/js/translated/sales_order.js:86 @@ -13678,27 +13823,27 @@ msgstr "取消订单" msgid "Complete Return Order" msgstr "生产订单完成" -#: templates/js/translated/return_order.js:266 +#: templates/js/translated/return_order.js:265 #, fuzzy #| msgid "No parameters found" msgid "No return orders found" msgstr "无指定参数" -#: templates/js/translated/return_order.js:300 -#: templates/js/translated/sales_order.js:788 +#: templates/js/translated/return_order.js:299 +#: templates/js/translated/sales_order.js:824 msgid "Invalid Customer" msgstr "" -#: templates/js/translated/return_order.js:562 +#: templates/js/translated/return_order.js:561 msgid "Receive Return Order Items" msgstr "" -#: templates/js/translated/return_order.js:693 -#: templates/js/translated/sales_order.js:2231 +#: templates/js/translated/return_order.js:692 +#: templates/js/translated/sales_order.js:2267 msgid "No matching line items" msgstr "" -#: templates/js/translated/return_order.js:798 +#: templates/js/translated/return_order.js:797 msgid "Mark item as received" msgstr "" @@ -13742,144 +13887,162 @@ msgstr "" msgid "Skip" msgstr "" +#: templates/js/translated/sales_order.js:484 +#, fuzzy +#| msgid "Sales Order" +msgid "Ship Sales Order" +msgstr "销售订单" + +#: templates/js/translated/sales_order.js:500 +msgid "Ship this order?" +msgstr "" + +#: templates/js/translated/sales_order.js:506 +msgid "Order cannot be shipped as there are incomplete shipments" +msgstr "" + #: templates/js/translated/sales_order.js:513 msgid "This order has line items which have not been completed." msgstr "" -#: templates/js/translated/sales_order.js:535 +#: templates/js/translated/sales_order.js:514 +msgid "Shipping this order means that the order and line items will no longer be editable." +msgstr "" + +#: templates/js/translated/sales_order.js:572 #, fuzzy #| msgid "New Sales Order" msgid "Issue this Sales Order?" msgstr "新建销售订单" -#: templates/js/translated/sales_order.js:540 +#: templates/js/translated/sales_order.js:577 #, fuzzy #| msgid "New Sales Order" msgid "Issue Sales Order" msgstr "新建销售订单" -#: templates/js/translated/sales_order.js:559 +#: templates/js/translated/sales_order.js:596 msgid "Cancel Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:564 +#: templates/js/translated/sales_order.js:601 msgid "Cancelling this order means that the order will no longer be editable." msgstr "" -#: templates/js/translated/sales_order.js:618 +#: templates/js/translated/sales_order.js:655 msgid "Create New Shipment" msgstr "" -#: templates/js/translated/sales_order.js:728 +#: templates/js/translated/sales_order.js:764 msgid "No sales orders found" msgstr "" -#: templates/js/translated/sales_order.js:908 +#: templates/js/translated/sales_order.js:944 msgid "Edit shipment" msgstr "" -#: templates/js/translated/sales_order.js:911 +#: templates/js/translated/sales_order.js:947 msgid "Complete shipment" msgstr "" -#: templates/js/translated/sales_order.js:916 +#: templates/js/translated/sales_order.js:952 msgid "Delete shipment" msgstr "" -#: templates/js/translated/sales_order.js:933 +#: templates/js/translated/sales_order.js:969 msgid "Edit Shipment" msgstr "" -#: templates/js/translated/sales_order.js:948 +#: templates/js/translated/sales_order.js:984 msgid "Delete Shipment" msgstr "" -#: templates/js/translated/sales_order.js:981 +#: templates/js/translated/sales_order.js:1017 msgid "No matching shipments found" msgstr "" -#: templates/js/translated/sales_order.js:1006 +#: templates/js/translated/sales_order.js:1042 msgid "Shipment Reference" msgstr "" -#: templates/js/translated/sales_order.js:1030 -#: templates/js/translated/sales_order.js:1529 +#: templates/js/translated/sales_order.js:1066 +#: templates/js/translated/sales_order.js:1565 msgid "Not shipped" msgstr "" -#: templates/js/translated/sales_order.js:1048 +#: templates/js/translated/sales_order.js:1084 msgid "Tracking" msgstr "" -#: templates/js/translated/sales_order.js:1052 +#: templates/js/translated/sales_order.js:1088 msgid "Invoice" msgstr "" -#: templates/js/translated/sales_order.js:1219 +#: templates/js/translated/sales_order.js:1255 msgid "Add Shipment" msgstr "" -#: templates/js/translated/sales_order.js:1270 +#: templates/js/translated/sales_order.js:1306 msgid "Confirm stock allocation" msgstr "确认库存分配" -#: templates/js/translated/sales_order.js:1271 +#: templates/js/translated/sales_order.js:1307 msgid "Allocate Stock Items to Sales Order" msgstr "" -#: templates/js/translated/sales_order.js:1477 +#: templates/js/translated/sales_order.js:1513 msgid "No sales order allocations found" msgstr "" -#: templates/js/translated/sales_order.js:1569 +#: templates/js/translated/sales_order.js:1605 msgid "Edit Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1583 +#: templates/js/translated/sales_order.js:1619 msgid "Confirm Delete Operation" msgstr "确认删除操作" -#: templates/js/translated/sales_order.js:1584 +#: templates/js/translated/sales_order.js:1620 msgid "Delete Stock Allocation" msgstr "" -#: templates/js/translated/sales_order.js:1623 -#: templates/js/translated/sales_order.js:1710 -#: templates/js/translated/stock.js:1773 +#: templates/js/translated/sales_order.js:1659 +#: templates/js/translated/sales_order.js:1746 +#: templates/js/translated/stock.js:1776 msgid "Shipped to customer" msgstr "" -#: templates/js/translated/sales_order.js:1631 -#: templates/js/translated/sales_order.js:1719 +#: templates/js/translated/sales_order.js:1667 +#: templates/js/translated/sales_order.js:1755 msgid "Stock location not specified" msgstr "" -#: templates/js/translated/sales_order.js:2008 +#: templates/js/translated/sales_order.js:2044 msgid "Allocate serial numbers" msgstr "" -#: templates/js/translated/sales_order.js:2012 +#: templates/js/translated/sales_order.js:2048 msgid "Purchase stock" msgstr "" -#: templates/js/translated/sales_order.js:2021 -#: templates/js/translated/sales_order.js:2209 +#: templates/js/translated/sales_order.js:2057 +#: templates/js/translated/sales_order.js:2245 msgid "Calculate price" msgstr "" -#: templates/js/translated/sales_order.js:2035 +#: templates/js/translated/sales_order.js:2071 msgid "Cannot be deleted as items have been shipped" msgstr "" -#: templates/js/translated/sales_order.js:2038 +#: templates/js/translated/sales_order.js:2074 msgid "Cannot be deleted as items have been allocated" msgstr "" -#: templates/js/translated/sales_order.js:2109 +#: templates/js/translated/sales_order.js:2145 msgid "Allocate Serial Numbers" msgstr "" -#: templates/js/translated/sales_order.js:2217 +#: templates/js/translated/sales_order.js:2253 msgid "Update Unit Price" msgstr "" @@ -14091,7 +14254,7 @@ msgstr "" msgid "Add Stock" msgstr "" -#: templates/js/translated/stock.js:1042 users/models.py:414 +#: templates/js/translated/stock.js:1042 users/models.py:401 msgid "Add" msgstr "添加" @@ -14099,192 +14262,192 @@ msgstr "添加" msgid "Delete Stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Quantity cannot be adjusted for serialized stock" msgstr "" -#: templates/js/translated/stock.js:1143 +#: templates/js/translated/stock.js:1146 msgid "Specify stock quantity" msgstr "" -#: templates/js/translated/stock.js:1177 templates/js/translated/stock.js:3299 +#: templates/js/translated/stock.js:1180 templates/js/translated/stock.js:3299 msgid "Select Stock Items" msgstr "选择库存项" -#: templates/js/translated/stock.js:1178 +#: templates/js/translated/stock.js:1181 msgid "Select at least one available stock item" msgstr "" -#: templates/js/translated/stock.js:1224 +#: templates/js/translated/stock.js:1227 msgid "Confirm stock adjustment" msgstr "" -#: templates/js/translated/stock.js:1360 +#: templates/js/translated/stock.js:1363 msgid "PASS" msgstr "" -#: templates/js/translated/stock.js:1362 +#: templates/js/translated/stock.js:1365 msgid "FAIL" msgstr "" -#: templates/js/translated/stock.js:1367 +#: templates/js/translated/stock.js:1370 msgid "NO RESULT" msgstr "" -#: templates/js/translated/stock.js:1447 +#: templates/js/translated/stock.js:1450 msgid "Pass test" msgstr "" -#: templates/js/translated/stock.js:1450 +#: templates/js/translated/stock.js:1453 msgid "Add test result" msgstr "" -#: templates/js/translated/stock.js:1473 +#: templates/js/translated/stock.js:1476 msgid "No test results found" msgstr "" -#: templates/js/translated/stock.js:1537 +#: templates/js/translated/stock.js:1540 msgid "Test Date" msgstr "" -#: templates/js/translated/stock.js:1550 +#: templates/js/translated/stock.js:1553 msgid "Test started" msgstr "" -#: templates/js/translated/stock.js:1559 +#: templates/js/translated/stock.js:1562 msgid "Test finished" msgstr "" -#: templates/js/translated/stock.js:1713 +#: templates/js/translated/stock.js:1716 msgid "Edit Test Result" msgstr "" -#: templates/js/translated/stock.js:1733 +#: templates/js/translated/stock.js:1736 msgid "Delete Test Result" msgstr "" -#: templates/js/translated/stock.js:1765 +#: templates/js/translated/stock.js:1768 msgid "In production" msgstr "正在生产" -#: templates/js/translated/stock.js:1769 +#: templates/js/translated/stock.js:1772 msgid "Installed in Stock Item" msgstr "" -#: templates/js/translated/stock.js:1777 +#: templates/js/translated/stock.js:1780 msgid "Assigned to Sales Order" msgstr "" -#: templates/js/translated/stock.js:1783 +#: templates/js/translated/stock.js:1786 msgid "No stock location set" msgstr "未设置仓储地点" -#: templates/js/translated/stock.js:1839 +#: templates/js/translated/stock.js:1842 msgid "Change stock status" msgstr "" -#: templates/js/translated/stock.js:1848 +#: templates/js/translated/stock.js:1851 msgid "Merge stock" msgstr "" -#: templates/js/translated/stock.js:1897 +#: templates/js/translated/stock.js:1900 msgid "Delete stock" msgstr "" -#: templates/js/translated/stock.js:1952 +#: templates/js/translated/stock.js:1953 #, fuzzy #| msgid "Stock Items" msgid "stock items" msgstr "库存项" -#: templates/js/translated/stock.js:1957 +#: templates/js/translated/stock.js:1958 #, fuzzy #| msgid "Stock Location" msgid "Scan to location" msgstr "仓储地点" -#: templates/js/translated/stock.js:1968 +#: templates/js/translated/stock.js:1969 #, fuzzy #| msgid "Stock Locations" msgid "Stock Actions" msgstr "仓储地点" -#: templates/js/translated/stock.js:2012 +#: templates/js/translated/stock.js:2013 #, fuzzy #| msgid "Installed into assembly" msgid "Load installed items" msgstr "安装到组装中" -#: templates/js/translated/stock.js:2090 +#: templates/js/translated/stock.js:2091 msgid "Stock item is in production" msgstr "库存品正在生产" -#: templates/js/translated/stock.js:2095 +#: templates/js/translated/stock.js:2096 msgid "Stock item assigned to sales order" msgstr "" -#: templates/js/translated/stock.js:2098 +#: templates/js/translated/stock.js:2099 msgid "Stock item assigned to customer" msgstr "" -#: templates/js/translated/stock.js:2101 +#: templates/js/translated/stock.js:2102 msgid "Serialized stock item has been allocated" msgstr "" -#: templates/js/translated/stock.js:2103 +#: templates/js/translated/stock.js:2104 msgid "Stock item has been fully allocated" msgstr "" -#: templates/js/translated/stock.js:2105 +#: templates/js/translated/stock.js:2106 msgid "Stock item has been partially allocated" msgstr "" -#: templates/js/translated/stock.js:2108 +#: templates/js/translated/stock.js:2109 msgid "Stock item has been installed in another item" msgstr "" -#: templates/js/translated/stock.js:2110 +#: templates/js/translated/stock.js:2111 #, fuzzy #| msgid "Accept as consumed by this build order" msgid "Stock item has been consumed by a build order" msgstr "接受此构建订单所消耗的内容" -#: templates/js/translated/stock.js:2114 +#: templates/js/translated/stock.js:2115 msgid "Stock item has expired" msgstr "" -#: templates/js/translated/stock.js:2116 +#: templates/js/translated/stock.js:2117 msgid "Stock item will expire soon" msgstr "" -#: templates/js/translated/stock.js:2121 +#: templates/js/translated/stock.js:2122 msgid "Stock item has been rejected" msgstr "" -#: templates/js/translated/stock.js:2123 +#: templates/js/translated/stock.js:2124 msgid "Stock item is lost" msgstr "" -#: templates/js/translated/stock.js:2125 +#: templates/js/translated/stock.js:2126 msgid "Stock item is destroyed" msgstr "" -#: templates/js/translated/stock.js:2129 +#: templates/js/translated/stock.js:2130 #: templates/js/translated/table_filters.js:350 msgid "Depleted" msgstr "" -#: templates/js/translated/stock.js:2294 +#: templates/js/translated/stock.js:2295 msgid "Supplier part not specified" msgstr "" -#: templates/js/translated/stock.js:2341 +#: templates/js/translated/stock.js:2342 #, fuzzy #| msgid "Stock Source" msgid "Stock Value" msgstr "库存来源" -#: templates/js/translated/stock.js:2469 +#: templates/js/translated/stock.js:2470 msgid "No stock items matching query" msgstr "" @@ -14781,6 +14944,22 @@ msgstr "" msgid "Show all notifications and history" msgstr "" +#: templates/pui_banner.html:9 +msgid "Platform UI - the new UI for InvenTree - provides more modern administration options." +msgstr "" + +#: templates/pui_banner.html:12 +msgid "Platform UI - the new UI for InvenTree - is ready to be tested." +msgstr "" + +#: templates/pui_banner.html:15 +msgid "Try it out now" +msgstr "" + +#: templates/pui_banner.html:15 +msgid "here" +msgstr "" + #: templates/qr_code.html:11 msgid "QR data not provided" msgstr "" @@ -15018,48 +15197,104 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:397 +#: users/models.py:384 msgid "Permission set" msgstr "权限设置" -#: users/models.py:406 +#: users/models.py:393 msgid "Group" msgstr "群组" -#: users/models.py:410 +#: users/models.py:397 msgid "View" msgstr "视图" -#: users/models.py:410 +#: users/models.py:397 msgid "Permission to view items" msgstr "查看项目权限" -#: users/models.py:414 +#: users/models.py:401 msgid "Permission to add items" msgstr "添加项目权限" -#: users/models.py:418 +#: users/models.py:405 msgid "Change" msgstr "更改" -#: users/models.py:420 +#: users/models.py:407 msgid "Permissions to edit items" msgstr "编辑项目权限" -#: users/models.py:426 +#: users/models.py:413 msgid "Permission to delete items" msgstr "删除项目权限" +#~ msgid "Label name" +#~ msgstr "标签名称" + +#~ msgid "Label description" +#~ msgstr "标签说明" + +#~ msgid "Label" +#~ msgstr "标签" + +#, fuzzy +#~| msgid "Error renaming file" +#~ msgid "Error rendering label to PNG" +#~ msgstr "重命名文件出错" + +#~ msgid "Part Filters" +#~ msgstr "商品过滤器" + +#, fuzzy +#~| msgid "Attachment with this filename already exists" +#~ msgid "Snippet file with this name already exists" +#~ msgstr "使用此文件名的附件已存在" + +#, fuzzy +#~| msgid "Query filters (comma-separated list of key=value pairs)," +#~ msgid "stock location query filters (comma-separated list of key=value pairs)" +#~ msgstr "查询筛选器 (逗号分隔的键值对列表)" + +#~ msgid "No Labels Found" +#~ msgstr "未找到标签" + +#, fuzzy +#~| msgid "No labels found which match the selected part(s)" +#~ msgid "No label templates found which match the selected items" +#~ msgstr "没有找到与所选商品相匹配的标签" + +#, fuzzy +#~| msgid "Rejected" +#~ msgid "selected" +#~ msgstr "已拒绝" + +#, fuzzy +#~| msgid "Print labels" +#~ msgid "Print label" +#~ msgstr "打印标签" + +#~ msgid "Print labels" +#~ msgstr "打印标签" + +#, fuzzy +#~| msgid "Print Label" +#~ msgid "Print" +#~ msgstr "打印标签" + +#~ msgid "No Reports Found" +#~ msgstr "没有找到报表" + +#, fuzzy +#~| msgid "No labels found which match the selected part(s)" +#~ msgid "No report templates found which match the selected items" +#~ msgstr "没有找到与所选商品相匹配的标签" + #, fuzzy #~| msgid "BOM Item" #~ msgid "Bom Item" #~ msgstr "BOM项" -#, fuzzy -#~| msgid "Create new purchase order" -#~ msgid "Invalid purchase order" -#~ msgstr "新建采购订单" - #, fuzzy #~| msgid "Stock Location" #~ msgid "Invalid stock location" @@ -15112,9 +15347,6 @@ msgstr "删除项目权限" #~ msgid "This Build Order does not have any associated untracked BOM items" #~ msgstr "此构建订单没有任何关联的 BOM 项目" -#~ msgid "Output Actions" -#~ msgstr "输出操作" - #~ msgid "Complete selected build outputs" #~ msgstr "完成选定的构建输出" diff --git a/src/backend/InvenTree/machine/machine_types/label_printer.py b/src/backend/InvenTree/machine/machine_types/label_printer.py index bfbff04a45..4fd7f04405 100644 --- a/src/backend/InvenTree/machine/machine_types/label_printer.py +++ b/src/backend/InvenTree/machine/machine_types/label_printer.py @@ -2,6 +2,7 @@ from typing import Union, cast +from django.db import models from django.db.models.query import QuerySet from django.http import HttpResponse, JsonResponse from django.utils.translation import gettext_lazy as _ @@ -10,10 +11,10 @@ from PIL.Image import Image from rest_framework import serializers from rest_framework.request import Request -from label.models import LabelTemplate from machine.machine_type import BaseDriver, BaseMachineType, MachineStatus from plugin import registry as plg_registry -from plugin.base.label.mixins import LabelItemType, LabelPrintingMixin +from plugin.base.label.mixins import LabelPrintingMixin +from report.models import LabelTemplate from stock.models import StockLocation @@ -32,7 +33,7 @@ class LabelPrinterBaseDriver(BaseDriver): self, machine: 'LabelPrinterMachine', label: LabelTemplate, - item: LabelItemType, + item: models.Model, request: Request, **kwargs, ) -> None: @@ -56,7 +57,7 @@ class LabelPrinterBaseDriver(BaseDriver): self, machine: 'LabelPrinterMachine', label: LabelTemplate, - items: QuerySet[LabelItemType], + items: QuerySet, request: Request, **kwargs, ) -> Union[None, JsonResponse]: @@ -83,7 +84,7 @@ class LabelPrinterBaseDriver(BaseDriver): self.print_label(machine, label, item, request, **kwargs) def get_printers( - self, label: LabelTemplate, items: QuerySet[LabelItemType], **kwargs + self, label: LabelTemplate, items: QuerySet, **kwargs ) -> list['LabelPrinterMachine']: """Get all printers that would be available to print this job. @@ -122,7 +123,7 @@ class LabelPrinterBaseDriver(BaseDriver): return cast(LabelPrintingMixin, plg) def render_to_pdf( - self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs + self, label: LabelTemplate, item: models.Model, request: Request, **kwargs ) -> HttpResponse: """Helper method to render a label to PDF format for a specific item. @@ -137,7 +138,7 @@ class LabelPrinterBaseDriver(BaseDriver): return response def render_to_pdf_data( - self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs + self, label: LabelTemplate, item: models.Model, request: Request, **kwargs ) -> bytes: """Helper method to render a label to PDF and return it as bytes for a specific item. @@ -153,7 +154,7 @@ class LabelPrinterBaseDriver(BaseDriver): ) def render_to_html( - self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs + self, label: LabelTemplate, item: models.Model, request: Request, **kwargs ) -> str: """Helper method to render a label to HTML format for a specific item. @@ -168,7 +169,7 @@ class LabelPrinterBaseDriver(BaseDriver): return html def render_to_png( - self, label: LabelTemplate, item: LabelItemType, request: Request, **kwargs + self, label: LabelTemplate, item: models.Model, request: Request, **kwargs ) -> Image: """Helper method to render a label to PNG format for a specific item. diff --git a/src/backend/InvenTree/machine/test_api.py b/src/backend/InvenTree/machine/test_api.py index f67b48d005..1a2e40a517 100644 --- a/src/backend/InvenTree/machine/test_api.py +++ b/src/backend/InvenTree/machine/test_api.py @@ -80,15 +80,18 @@ class MachineAPITest(TestMachineRegistryMixin, InvenTreeAPITestCase): machine_type = [t for t in response.data if t['slug'] == 'label-printer'] self.assertEqual(len(machine_type), 1) machine_type = machine_type[0] - self.assertDictContainsSubset( - { - 'slug': 'label-printer', - 'name': 'Label Printer', - 'description': 'Directly print labels for various items.', - 'provider_plugin': None, - 'is_builtin': True, - }, + self.assertEqual( machine_type, + { + **machine_type, + **{ + 'slug': 'label-printer', + 'name': 'Label Printer', + 'description': 'Directly print labels for various items.', + 'provider_plugin': None, + 'is_builtin': True, + }, + }, ) self.assertTrue( machine_type['provider_file'].endswith( @@ -102,17 +105,20 @@ class MachineAPITest(TestMachineRegistryMixin, InvenTreeAPITestCase): driver = [a for a in response.data if a['slug'] == 'test-label-printer-api'] self.assertEqual(len(driver), 1) driver = driver[0] - self.assertDictContainsSubset( - { - 'slug': 'test-label-printer-api', - 'name': 'Test label printer', - 'description': 'This is a test label printer driver for testing.', - 'provider_plugin': None, - 'is_builtin': True, - 'machine_type': 'label-printer', - 'driver_errors': [], - }, + self.assertEqual( driver, + { + **driver, + **{ + 'slug': 'test-label-printer-api', + 'name': 'Test label printer', + 'description': 'This is a test label printer driver for testing.', + 'provider_plugin': None, + 'is_builtin': True, + 'machine_type': 'label-printer', + 'driver_errors': [], + }, + }, ) self.assertEqual(driver['provider_file'], __file__) @@ -163,19 +169,22 @@ class MachineAPITest(TestMachineRegistryMixin, InvenTreeAPITestCase): response = self.get(reverse('api-machine-list')) self.assertEqual(len(response.data), 1) - self.assertDictContainsSubset( - { - 'name': 'Test Machine', - 'machine_type': 'label-printer', - 'driver': 'test-label-printer-api', - 'initialized': True, - 'active': True, - 'status': 101, - 'status_model': 'LabelPrinterStatus', - 'status_text': '', - 'is_driver_available': True, - }, + self.assertEqual( response.data[0], + { + **response.data[0], + **{ + 'name': 'Test Machine', + 'machine_type': 'label-printer', + 'driver': 'test-label-printer-api', + 'initialized': True, + 'active': True, + 'status': 101, + 'status_model': 'LabelPrinterStatus', + 'status_text': '', + 'is_driver_available': True, + }, + }, ) def test_machine_detail(self): @@ -195,19 +204,21 @@ class MachineAPITest(TestMachineRegistryMixin, InvenTreeAPITestCase): # Create a machine response = self.post(reverse('api-machine-list'), machine_data) - self.assertDictContainsSubset(machine_data, response.data) + self.assertEqual(response.data, {**response.data, **machine_data}) pk = response.data['pk'] # Retrieve the machine response = self.get(reverse('api-machine-detail', kwargs={'pk': pk})) - self.assertDictContainsSubset(machine_data, response.data) + self.assertEqual(response.data, {**response.data, **machine_data}) # Update the machine response = self.patch( reverse('api-machine-detail', kwargs={'pk': pk}), {'name': 'Updated Machine'}, ) - self.assertDictContainsSubset({'name': 'Updated Machine'}, response.data) + self.assertEqual( + response.data, {**response.data, **{'name': 'Updated Machine'}} + ) self.assertEqual(MachineConfig.objects.get(pk=pk).name, 'Updated Machine') # Delete the machine diff --git a/src/backend/InvenTree/machine/tests.py b/src/backend/InvenTree/machine/tests.py index ef37f5d5b3..992ca3fe0e 100755 --- a/src/backend/InvenTree/machine/tests.py +++ b/src/backend/InvenTree/machine/tests.py @@ -10,7 +10,6 @@ from django.urls import reverse from rest_framework import serializers from InvenTree.unit_test import InvenTreeAPITestCase -from label.models import PartLabel from machine.machine_type import BaseDriver, BaseMachineType, MachineStatus from machine.machine_types.label_printer import LabelPrinterBaseDriver from machine.models import MachineConfig @@ -18,6 +17,7 @@ from machine.registry import registry from part.models import Part from plugin.models import PluginConfig from plugin.registry import registry as plg_registry +from report.models import LabelTemplate class TestMachineRegistryMixin(TestCase): @@ -247,31 +247,33 @@ class TestLabelPrinterMachineType(TestMachineRegistryMixin, InvenTreeAPITestCase plugin_ref = 'inventreelabelmachine' # setup the label app - apps.get_app_config('label').create_defaults() # type: ignore + apps.get_app_config('report').create_default_labels() # type: ignore plg_registry.reload_plugins() config = cast(PluginConfig, plg_registry.get_plugin(plugin_ref).plugin_config()) # type: ignore config.active = True config.save() parts = Part.objects.all()[:2] - label = cast(PartLabel, PartLabel.objects.first()) + template = LabelTemplate.objects.filter(enabled=True, model_type='part').first() - url = reverse('api-part-label-print', kwargs={'pk': label.pk}) - url += f'/?plugin={plugin_ref}&part[]={parts[0].pk}&part[]={parts[1].pk}' + url = reverse('api-label-print') self.post( url, { + 'plugin': config.key, + 'items': [a.pk for a in parts], + 'template': template.pk, 'machine': str(self.machine.pk), 'driver_options': {'copies': '1', 'test_option': '2'}, }, - expected_code=200, + expected_code=201, ) # test the print labels method call self.print_labels.assert_called_once() self.assertEqual(self.print_labels.call_args.args[0], self.machine.machine) - self.assertEqual(self.print_labels.call_args.args[1], label) + self.assertEqual(self.print_labels.call_args.args[1], template) # TODO re-activate test # self.assertQuerySetEqual( diff --git a/src/backend/InvenTree/order/admin.py b/src/backend/InvenTree/order/admin.py index 2345e8ca2a..a26d7499a3 100644 --- a/src/backend/InvenTree/order/admin.py +++ b/src/backend/InvenTree/order/admin.py @@ -114,7 +114,7 @@ class PurchaseOrderAdmin(ImportExportModelAdmin): inlines = [PurchaseOrderLineItemInlineAdmin] - autocomplete_fields = ('supplier',) + autocomplete_fields = ['supplier', 'project_code', 'contact', 'address'] class SalesOrderResource( @@ -152,7 +152,7 @@ class SalesOrderAdmin(ImportExportModelAdmin): search_fields = ['reference', 'customer__name', 'description'] - autocomplete_fields = ('customer',) + autocomplete_fields = ['customer', 'project_code', 'contact', 'address'] class PurchaseOrderLineItemResource(PriceResourceMixin, InvenTreeResource): @@ -317,7 +317,7 @@ class ReturnOrderAdmin(ImportExportModelAdmin): search_fields = ['reference', 'customer__name', 'description'] - autocomplete_fields = ['customer'] + autocomplete_fields = ['customer', 'project_code', 'contact', 'address'] class ReturnOrderLineItemResource(PriceResourceMixin, InvenTreeResource): diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index 1d6692793e..b2dd13483b 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -3,6 +3,7 @@ from decimal import Decimal from typing import cast +from django.conf import settings from django.contrib.auth import authenticate, login from django.db import transaction from django.db.models import F, Q @@ -17,7 +18,6 @@ from rest_framework.exceptions import ValidationError from rest_framework.response import Response import common.models as common_models -from common.settings import settings from company.models import SupplierPart from generic.states.api import StatusView from InvenTree.api import ( @@ -30,14 +30,6 @@ from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS from InvenTree.helpers import DownloadFile, str2bool from InvenTree.helpers_model import construct_absolute_url, get_base_url from InvenTree.mixins import CreateAPI, ListAPI, ListCreateAPI, RetrieveUpdateDestroyAPI -from InvenTree.status_codes import ( - PurchaseOrderStatus, - PurchaseOrderStatusGroups, - ReturnOrderLineStatus, - ReturnOrderStatus, - SalesOrderStatus, - SalesOrderStatusGroups, -) from order import models, serializers from order.admin import ( PurchaseOrderExtraLineResource, @@ -48,6 +40,14 @@ from order.admin import ( SalesOrderLineItemResource, SalesOrderResource, ) +from order.status_codes import ( + PurchaseOrderStatus, + PurchaseOrderStatusGroups, + ReturnOrderLineStatus, + ReturnOrderStatus, + SalesOrderStatus, + SalesOrderStatusGroups, +) from part.models import Part from users.models import Owner @@ -148,6 +148,10 @@ class OrderFilter(rest_filters.FilterSet): return queryset.exclude(project_code=None) return queryset.filter(project_code=None) + assigned_to = rest_filters.ModelChoiceFilter( + queryset=Owner.objects.all(), field_name='responsible' + ) + class LineItemFilter(rest_filters.FilterSet): """Base class for custom API filters for order line item list(s).""" diff --git a/src/backend/InvenTree/order/migrations/0001_initial.py b/src/backend/InvenTree/order/migrations/0001_initial.py index 642b321d47..edceeffc11 100644 --- a/src/backend/InvenTree/order/migrations/0001_initial.py +++ b/src/backend/InvenTree/order/migrations/0001_initial.py @@ -30,6 +30,7 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Purchase Order' }, ), migrations.CreateModel( diff --git a/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py b/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py index aef57a3437..76e903b45a 100644 --- a/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py +++ b/src/backend/InvenTree/order/migrations/0020_auto_20200420_0940.py @@ -35,6 +35,7 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Sales Order', }, ), migrations.AlterField( diff --git a/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py b/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py index 121bdbe64f..efd157f5b6 100644 --- a/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py +++ b/src/backend/InvenTree/order/migrations/0038_auto_20201112_1737.py @@ -2,6 +2,7 @@ from django.db import migrations import djmoney.models.fields +import common.currency import common.settings @@ -16,11 +17,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='purchaseorderlineitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), ), migrations.AddField( model_name='purchaseorderlineitem', name='purchase_price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py b/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py index 52b51b6ca9..0035f9a949 100644 --- a/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py +++ b/src/backend/InvenTree/order/migrations/0039_auto_20201112_2203.py @@ -2,6 +2,7 @@ from django.db import migrations import djmoney.models.fields +import common.currency import common.settings @@ -15,6 +16,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='purchaseorderlineitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit purchase price', max_digits=19, null=True, verbose_name='Purchase Price'), ), ] diff --git a/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py b/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py index c1e5f23df2..4faadf2715 100644 --- a/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py +++ b/src/backend/InvenTree/order/migrations/0045_auto_20210504_1946.py @@ -1,6 +1,7 @@ # Generated by Django 3.2 on 2021-05-04 19:46 from django.db import migrations +import common.currency import common.settings import djmoney.models.fields @@ -15,11 +16,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='salesorderlineitem', name='sale_price', - field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit sale price', max_digits=19, null=True, verbose_name='Sale Price'), + field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit sale price', max_digits=19, null=True, verbose_name='Sale Price'), ), migrations.AddField( model_name='salesorderlineitem', name='sale_price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py b/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py index 0efab70da8..69ef6e6add 100644 --- a/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py +++ b/src/backend/InvenTree/order/migrations/0055_auto_20211025_0645.py @@ -3,7 +3,7 @@ from django.db import migrations -from InvenTree.status_codes import SalesOrderStatus +from order.status_codes import SalesOrderStatus def add_shipment(apps, schema_editor): diff --git a/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py b/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py index 1377a9a0b9..6c31d93099 100644 --- a/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py +++ b/src/backend/InvenTree/order/migrations/0058_auto_20211126_1210.py @@ -2,7 +2,7 @@ from django.db import migrations -from InvenTree.status_codes import SalesOrderStatus +from order.status_codes import SalesOrderStatus def calculate_shipped_quantity(apps, schema_editor): diff --git a/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py b/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py index 0d1dd8041c..ffc27b6b8e 100644 --- a/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py +++ b/src/backend/InvenTree/order/migrations/0079_auto_20230304_0904.py @@ -8,7 +8,7 @@ from djmoney.contrib.exchange.exceptions import MissingRate from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money -from common.settings import currency_code_default +from common.currency import currency_code_default logger = logging.getLogger('inventree') diff --git a/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py b/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py index 719a7a5037..f15b800ffe 100644 --- a/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py +++ b/src/backend/InvenTree/order/migrations/0081_auto_20230314_0725.py @@ -39,6 +39,7 @@ class Migration(migrations.Migration): ], options={ 'abstract': False, + 'verbose_name': 'Return Order', }, ), migrations.AlterField( diff --git a/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py b/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py index ac95830807..9c80796a6f 100644 --- a/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py +++ b/src/backend/InvenTree/order/migrations/0096_alter_returnorderlineitem_outcome.py @@ -1,7 +1,7 @@ # Generated by Django 3.2.19 on 2023-06-04 17:43 from django.db import migrations, models -import InvenTree.status_codes +import order.status_codes class Migration(migrations.Migration): @@ -14,6 +14,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='returnorderlineitem', name='outcome', - field=models.PositiveIntegerField(choices=InvenTree.status_codes.ReturnOrderLineStatus.items(), default=10, help_text='Outcome for this line item', verbose_name='Outcome'), + field=models.PositiveIntegerField(choices=order.status_codes.ReturnOrderLineStatus.items(), default=10, help_text='Outcome for this line item', verbose_name='Outcome'), ), ] diff --git a/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py b/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py new file mode 100644 index 0000000000..23d9b95d86 --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0099_alter_salesorder_status.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.11 on 2024-04-03 00:40 + +import django.core.validators +from django.db import migrations, models +import order.status_codes + + +class Migration(migrations.Migration): + + dependencies = [ + ('order', '0098_auto_20231024_1844'), + ] + + operations = [ + migrations.AlterField( + model_name='salesorder', + name='status', + field=models.PositiveIntegerField(choices=order.status_codes.SalesOrderStatus.items(), default=10, help_text='Purchase order status', verbose_name='Status'), + ), + ] diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 94710c01a9..36dad6aa9f 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -30,10 +30,11 @@ import InvenTree.ready import InvenTree.tasks import InvenTree.validators import order.validators +import report.mixins import stock.models import users.models as UserModels +from common.currency import currency_code_default from common.notifications import InvenTreeNotificationBodies -from common.settings import currency_code_default from company.models import Address, Company, Contact, SupplierPart from generic.states import StateTransitionMixin from InvenTree.exceptions import log_error @@ -44,7 +45,7 @@ from InvenTree.fields import ( ) from InvenTree.helpers import decimal2string, pui_url from InvenTree.helpers_model import getSetting, notify_responsible -from InvenTree.status_codes import ( +from order.status_codes import ( PurchaseOrderStatus, PurchaseOrderStatusGroups, ReturnOrderLineStatus, @@ -52,11 +53,10 @@ from InvenTree.status_codes import ( ReturnOrderStatusGroups, SalesOrderStatus, SalesOrderStatusGroups, - StockHistoryCode, - StockStatus, ) from part import models as PartModels from plugin.events import trigger_event +from stock.status_codes import StockHistoryCode, StockStatus logger = logging.getLogger('inventree') @@ -185,6 +185,7 @@ class Order( StateTransitionMixin, InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, + report.mixins.InvenTreeReportMixin, InvenTree.models.MetadataMixin, InvenTree.models.ReferenceIndexingMixin, InvenTree.models.InvenTreeModel, @@ -246,6 +247,17 @@ class Order( 'contact': _('Contact does not match selected company') }) + def report_context(self): + """Generate context data for the reporting interface.""" + return { + 'description': self.description, + 'extra_lines': self.extra_lines, + 'lines': self.lines, + 'order': self, + 'reference': self.reference, + 'title': str(self), + } + @classmethod def overdue_filter(cls): """A generic implementation of an 'overdue' filter for the Model class. @@ -362,6 +374,15 @@ class PurchaseOrder(TotalPriceMixin, Order): REFERENCE_PATTERN_SETTING = 'PURCHASEORDER_REFERENCE_PATTERN' REQUIRE_RESPONSIBLE_SETTING = 'PURCHASEORDER_REQUIRE_RESPONSIBLE' + class Meta: + """Model meta options.""" + + verbose_name = _('Purchase Order') + + def report_context(self): + """Return report context data for this PurchaseOrder.""" + return {**super().report_context(), 'supplier': self.supplier} + def get_absolute_url(self): """Get the 'web' URL for this order.""" if settings.ENABLE_CLASSIC_FRONTEND: @@ -820,6 +841,15 @@ class SalesOrder(TotalPriceMixin, Order): REFERENCE_PATTERN_SETTING = 'SALESORDER_REFERENCE_PATTERN' REQUIRE_RESPONSIBLE_SETTING = 'SALESORDER_REQUIRE_RESPONSIBLE' + class Meta: + """Model meta options.""" + + verbose_name = _('Sales Order') + + def report_context(self): + """Generate report context data for this SalesOrder.""" + return {**super().report_context(), 'customer': self.customer} + def get_absolute_url(self): """Get the 'web' URL for this order.""" if settings.ENABLE_CLASSIC_FRONTEND: @@ -993,22 +1023,22 @@ class SalesOrder(TotalPriceMixin, Order): Throws a ValidationError if cannot be completed. """ try: - # Order without line items cannot be completed - if self.lines.count() == 0: - raise ValidationError( - _('Order cannot be completed as no parts have been assigned') - ) + if self.status == SalesOrderStatus.COMPLETE.value: + raise ValidationError(_('Order is already complete')) + + if self.status == SalesOrderStatus.CANCELLED.value: + raise ValidationError(_('Order is already cancelled')) # Only an open order can be marked as shipped - elif not self.is_open: + if self.is_open and not self.is_completed: raise ValidationError(_('Only an open order can be marked as complete')) - elif self.pending_shipment_count > 0: + if self.pending_shipment_count > 0: raise ValidationError( _('Order cannot be completed as there are incomplete shipments') ) - elif not allow_incomplete_lines and self.pending_line_count > 0: + if not allow_incomplete_lines and self.pending_line_count > 0: raise ValidationError( _('Order cannot be completed as there are incomplete line items') ) @@ -1042,9 +1072,16 @@ class SalesOrder(TotalPriceMixin, Order): if not self.can_complete(**kwargs): return False - self.status = SalesOrderStatus.SHIPPED.value - self.shipped_by = user - self.shipment_date = InvenTree.helpers.current_date() + bypass_shipped = InvenTree.helpers.str2bool( + common_models.InvenTreeSetting.get_setting('SALESORDER_SHIP_COMPLETE') + ) + + if bypass_shipped or self.status == SalesOrderStatus.SHIPPED: + self.status = SalesOrderStatus.COMPLETE.value + else: + self.status = SalesOrderStatus.SHIPPED.value + self.shipped_by = user + self.shipment_date = InvenTree.helpers.current_date() self.save() @@ -1098,7 +1135,7 @@ class SalesOrder(TotalPriceMixin, Order): ) @transaction.atomic - def complete_order(self, user, **kwargs): + def ship_order(self, user, **kwargs): """Attempt to transition to SHIPPED status.""" return self.handle_transition( self.status, @@ -1109,6 +1146,18 @@ class SalesOrder(TotalPriceMixin, Order): **kwargs, ) + @transaction.atomic + def complete_order(self, user, **kwargs): + """Attempt to transition to COMPLETED status.""" + return self.handle_transition( + self.status, + SalesOrderStatus.COMPLETED.value, + self, + self._action_complete, + user=user, + **kwargs, + ) + @transaction.atomic def cancel_order(self): """Attempt to transition to CANCELLED status.""" @@ -1962,6 +2011,15 @@ class ReturnOrder(TotalPriceMixin, Order): REFERENCE_PATTERN_SETTING = 'RETURNORDER_REFERENCE_PATTERN' REQUIRE_RESPONSIBLE_SETTING = 'RETURNORDER_REQUIRE_RESPONSIBLE' + class Meta: + """Model meta options.""" + + verbose_name = _('Return Order') + + def report_context(self): + """Generate report context data for this ReturnOrder.""" + return {**super().report_context(), 'customer': self.customer} + def get_absolute_url(self): """Get the 'web' URL for this order.""" if settings.ENABLE_CLASSIC_FRONTEND: diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index 42f6a3c69e..ee882beaa3 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -47,15 +47,16 @@ from InvenTree.serializers import ( InvenTreeDecimalField, InvenTreeModelSerializer, InvenTreeMoneySerializer, + NotesFieldMixin, ) -from InvenTree.status_codes import ( +from order.status_codes import ( PurchaseOrderStatusGroups, ReturnOrderLineStatus, ReturnOrderStatus, SalesOrderStatusGroups, - StockStatus, ) from part.serializers import PartBriefSerializer +from stock.status_codes import StockStatus from users.serializers import OwnerSerializer @@ -77,16 +78,18 @@ class AbstractOrderSerializer(serializers.Serializer): """Abstract serializer class which provides fields common to all order types.""" # Number of line items in this order - line_items = serializers.IntegerField(read_only=True) + line_items = serializers.IntegerField(read_only=True, label=_('Line Items')) # Number of completed line items (this is an annotated field) - completed_lines = serializers.IntegerField(read_only=True) + completed_lines = serializers.IntegerField( + read_only=True, label=_('Completed Lines') + ) # Human-readable status text (read-only) status_text = serializers.CharField(source='get_status_display', read_only=True) # status field cannot be set directly - status = serializers.IntegerField(read_only=True) + status = serializers.IntegerField(read_only=True, label=_('Order Status')) # Reference string is *required* reference = serializers.CharField(required=True) @@ -114,7 +117,9 @@ class AbstractOrderSerializer(serializers.Serializer): barcode_hash = serializers.CharField(read_only=True) - creation_date = serializers.DateField(required=False, allow_null=True) + creation_date = serializers.DateField( + required=False, allow_null=True, label=_('Creation Date') + ) def validate_reference(self, reference): """Custom validation for the reference field.""" @@ -194,7 +199,7 @@ class AbstractExtraLineMeta: class PurchaseOrderSerializer( - TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer + NotesFieldMixin, TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer ): """Serializer for a PurchaseOrder object.""" @@ -764,7 +769,7 @@ class PurchaseOrderAttachmentSerializer(InvenTreeAttachmentSerializer): class SalesOrderSerializer( - TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer + NotesFieldMixin, TotalPriceMixin, AbstractOrderSerializer, InvenTreeModelSerializer ): """Serializer for the SalesOrder model class.""" @@ -1071,7 +1076,7 @@ class SalesOrderLineItemSerializer(InvenTreeModelSerializer): ) -class SalesOrderShipmentSerializer(InvenTreeModelSerializer): +class SalesOrderShipmentSerializer(NotesFieldMixin, InvenTreeModelSerializer): """Serializer for the SalesOrderShipment class.""" class Meta: @@ -1284,7 +1289,7 @@ class SalesOrderCompleteSerializer(serializers.Serializer): user = getattr(request, 'user', None) - order.complete_order( + order.ship_order( user, allow_incomplete_lines=str2bool(data.get('accept_incomplete', False)) ) @@ -1532,7 +1537,7 @@ class SalesOrderAttachmentSerializer(InvenTreeAttachmentSerializer): class ReturnOrderSerializer( - AbstractOrderSerializer, TotalPriceMixin, InvenTreeModelSerializer + NotesFieldMixin, AbstractOrderSerializer, TotalPriceMixin, InvenTreeModelSerializer ): """Serializer for the ReturnOrder model class.""" diff --git a/src/backend/InvenTree/order/status_codes.py b/src/backend/InvenTree/order/status_codes.py new file mode 100644 index 0000000000..cec286dc09 --- /dev/null +++ b/src/backend/InvenTree/order/status_codes.py @@ -0,0 +1,97 @@ +"""Order status codes.""" + +from django.utils.translation import gettext_lazy as _ + +from generic.states import StatusCode + + +class PurchaseOrderStatus(StatusCode): + """Defines a set of status codes for a PurchaseOrder.""" + + # Order status codes + PENDING = 10, _('Pending'), 'secondary' # Order is pending (not yet placed) + PLACED = 20, _('Placed'), 'primary' # Order has been placed with supplier + COMPLETE = 30, _('Complete'), 'success' # Order has been completed + CANCELLED = 40, _('Cancelled'), 'danger' # Order was cancelled + LOST = 50, _('Lost'), 'warning' # Order was lost + RETURNED = 60, _('Returned'), 'warning' # Order was returned + + +class PurchaseOrderStatusGroups: + """Groups for PurchaseOrderStatus codes.""" + + # Open orders + OPEN = [PurchaseOrderStatus.PENDING.value, PurchaseOrderStatus.PLACED.value] + + # Failed orders + FAILED = [ + PurchaseOrderStatus.CANCELLED.value, + PurchaseOrderStatus.LOST.value, + PurchaseOrderStatus.RETURNED.value, + ] + + +class SalesOrderStatus(StatusCode): + """Defines a set of status codes for a SalesOrder.""" + + PENDING = 10, _('Pending'), 'secondary' # Order is pending + IN_PROGRESS = ( + 15, + _('In Progress'), + 'primary', + ) # Order has been issued, and is in progress + SHIPPED = 20, _('Shipped'), 'success' # Order has been shipped to customer + COMPLETE = 30, _('Complete'), 'success' # Order is complete + CANCELLED = 40, _('Cancelled'), 'danger' # Order has been cancelled + LOST = 50, _('Lost'), 'warning' # Order was lost + RETURNED = 60, _('Returned'), 'warning' # Order was returned + + +class SalesOrderStatusGroups: + """Groups for SalesOrderStatus codes.""" + + # Open orders + OPEN = [SalesOrderStatus.PENDING.value, SalesOrderStatus.IN_PROGRESS.value] + + # Completed orders + COMPLETE = [SalesOrderStatus.SHIPPED.value, SalesOrderStatus.COMPLETE.value] + + +class ReturnOrderStatus(StatusCode): + """Defines a set of status codes for a ReturnOrder.""" + + # Order is pending, waiting for receipt of items + PENDING = 10, _('Pending'), 'secondary' + + # Items have been received, and are being inspected + IN_PROGRESS = 20, _('In Progress'), 'primary' + + COMPLETE = 30, _('Complete'), 'success' + CANCELLED = 40, _('Cancelled'), 'danger' + + +class ReturnOrderStatusGroups: + """Groups for ReturnOrderStatus codes.""" + + OPEN = [ReturnOrderStatus.PENDING.value, ReturnOrderStatus.IN_PROGRESS.value] + + +class ReturnOrderLineStatus(StatusCode): + """Defines a set of status codes for a ReturnOrderLineItem.""" + + PENDING = 10, _('Pending'), 'secondary' + + # Item is to be returned to customer, no other action + RETURN = 20, _('Return'), 'success' + + # Item is to be repaired, and returned to customer + REPAIR = 30, _('Repair'), 'primary' + + # Item is to be replaced (new item shipped) + REPLACE = 40, _('Replace'), 'warning' + + # Item is to be refunded (cannot be repaired) + REFUND = 50, _('Refund'), 'info' + + # Item is rejected + REJECT = 60, _('Reject'), 'danger' diff --git a/src/backend/InvenTree/order/tasks.py b/src/backend/InvenTree/order/tasks.py index 0c0c8cea30..1e1231a810 100644 --- a/src/backend/InvenTree/order/tasks.py +++ b/src/backend/InvenTree/order/tasks.py @@ -7,8 +7,8 @@ from django.utils.translation import gettext_lazy as _ import common.notifications import InvenTree.helpers_model import order.models -from InvenTree.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups from InvenTree.tasks import ScheduledTask, scheduled_task +from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups from plugin.events import trigger_event diff --git a/src/backend/InvenTree/order/templates/order/order_base.html b/src/backend/InvenTree/order/templates/order/order_base.html index 173eaeb119..af422e6794 100644 --- a/src/backend/InvenTree/order/templates/order/order_base.html +++ b/src/backend/InvenTree/order/templates/order/order_base.html @@ -253,11 +253,7 @@ $("#place-order").click(function() { {% if report_enabled %} $('#print-order-report').click(function() { - printReports({ - items: [{{ order.pk }}], - key: 'order', - url: '{% url "api-po-report-list" %}', - }); + printReports('purchaseorder', [{{ order.pk }}]); }); {% endif %} diff --git a/src/backend/InvenTree/order/templates/order/purchase_order_detail.html b/src/backend/InvenTree/order/templates/order/purchase_order_detail.html index 85065ff46f..9abc95f365 100644 --- a/src/backend/InvenTree/order/templates/order/purchase_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/purchase_order_detail.html @@ -120,6 +120,8 @@ 'order-notes', '{% url "api-po-detail" order.pk %}', { + model_type: "purchaseorder", + model_id: {{ order.pk }}, {% if roles.purchase_order.change %} editable: true, {% else %} diff --git a/src/backend/InvenTree/order/templates/order/return_order_base.html b/src/backend/InvenTree/order/templates/order/return_order_base.html index eb80a70d53..32ccd23f85 100644 --- a/src/backend/InvenTree/order/templates/order/return_order_base.html +++ b/src/backend/InvenTree/order/templates/order/return_order_base.html @@ -248,11 +248,7 @@ $('#cancel-order').click(function() { {% if report_enabled %} $('#print-order-report').click(function() { - printReports({ - items: [{{ order.pk }}], - key: 'order', - url: '{% url "api-return-order-report-list" %}', - }); + printReports('returnorder', [{{ order.pk }}]); }); {% endif %} diff --git a/src/backend/InvenTree/order/templates/order/return_order_detail.html b/src/backend/InvenTree/order/templates/order/return_order_detail.html index 9c11ff6270..8cabf3a9e2 100644 --- a/src/backend/InvenTree/order/templates/order/return_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/return_order_detail.html @@ -175,6 +175,8 @@ onPanelLoad('order-notes', function() { 'order-notes', '{% url "api-return-order-detail" order.pk %}', { + model_type: 'returnorder', + model_id: {{ order.pk }}, {% if roles.purchase_order.change %} editable: true, {% else %} diff --git a/src/backend/InvenTree/order/templates/order/sales_order_base.html b/src/backend/InvenTree/order/templates/order/sales_order_base.html index f184d8d2bc..bc306502a7 100644 --- a/src/backend/InvenTree/order/templates/order/sales_order_base.html +++ b/src/backend/InvenTree/order/templates/order/sales_order_base.html @@ -89,6 +89,10 @@ src="{% static 'img/blank_image.png' %}" {% trans "Ship Items" %} {% endif %} + + {% elif order.status == SalesOrderStatus.SHIPPED %} @@ -286,6 +290,15 @@ $("#cancel-order").click(function() { ); }); +$("#ship-order").click(function() { + shipSalesOrder( + {{ order.pk }}, + { + reload: true, + } + ); +}); + $("#complete-order").click(function() { completeSalesOrder( {{ order.pk }}, @@ -297,11 +310,7 @@ $("#complete-order").click(function() { {% if report_enabled %} $('#print-order-report').click(function() { - printReports({ - items: [{{ order.pk }}], - key: 'order', - url: '{% url "api-so-report-list" %}', - }); + printReports('salesorder', [{{ order.pk }}]); }); {% endif %} diff --git a/src/backend/InvenTree/order/templates/order/sales_order_detail.html b/src/backend/InvenTree/order/templates/order/sales_order_detail.html index 4d9fac48f0..3b92201f10 100644 --- a/src/backend/InvenTree/order/templates/order/sales_order_detail.html +++ b/src/backend/InvenTree/order/templates/order/sales_order_detail.html @@ -190,6 +190,8 @@ 'order-notes', '{% url "api-so-detail" order.pk %}', { + model_type: "salesorder", + model_id: {{ order.pk }}, {% if roles.purchase_order.change %} editable: true, {% else %} diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index d9f63d67c0..73518b7ac8 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -13,21 +13,21 @@ from djmoney.money import Money from icalendar import Calendar from rest_framework import status +from common.currency import currency_codes from common.models import InvenTreeSetting -from common.settings import currency_codes from company.models import Company, SupplierPart, SupplierPriceBreak -from InvenTree.status_codes import ( +from InvenTree.unit_test import InvenTreeAPITestCase +from order import models +from order.status_codes import ( PurchaseOrderStatus, ReturnOrderLineStatus, ReturnOrderStatus, SalesOrderStatus, SalesOrderStatusGroups, - StockStatus, ) -from InvenTree.unit_test import InvenTreeAPITestCase -from order import models from part.models import Part from stock.models import StockItem +from stock.status_codes import StockStatus from users.models import Owner @@ -418,7 +418,7 @@ class PurchaseOrderTest(OrderTest): po = models.PurchaseOrder.objects.get(pk=1) - self.assertTrue(po.lines.count() > 0) + self.assertGreater(po.lines.count(), 0) lines = [] @@ -839,7 +839,7 @@ class PurchaseOrderDownloadTest(OrderTest): expected_code=200, expected_fn='InvenTree_PurchaseOrderItems.xlsx', ) as file: - self.assertTrue(isinstance(file, io.BytesIO)) + self.assertIsInstance(file, io.BytesIO) class PurchaseOrderReceiveTest(OrderTest): @@ -1108,7 +1108,7 @@ class PurchaseOrderReceiveTest(OrderTest): n = StockItem.objects.count() - self.post(self.url, data, expected_code=201) + self.post(self.url, data, expected_code=201, max_query_count=400) # Check that the expected number of stock items has been created self.assertEqual(n + 11, StockItem.objects.count()) @@ -1476,6 +1476,77 @@ class SalesOrderTest(OrderTest): expected_fn=f'InvenTree_SalesOrders.{fmt}', ) + def test_sales_order_complete(self): + """Tests for marking a SalesOrder as complete.""" + self.assignRole('sales_order.add') + + # Let's create a SalesOrder + customer = Company.objects.filter(is_customer=True).first() + so = models.SalesOrder.objects.create( + customer=customer, reference='SO-12345', description='Test SO' + ) + + self.assertEqual(so.status, SalesOrderStatus.PENDING.value) + + # Create a line item + part = Part.objects.filter(salable=True).first() + + line = models.SalesOrderLineItem.objects.create( + order=so, part=part, quantity=10, sale_price=Money(10, 'USD') + ) + + shipment = so.shipments.first() + + if shipment is None: + shipment = models.SalesOrderShipment.objects.create( + order=so, reference='SHIP-12345' + ) + + # Allocate some stock + item = StockItem.objects.create(part=part, quantity=100, location=None) + models.SalesOrderAllocation.objects.create( + quantity=10, line=line, item=item, shipment=shipment + ) + + # Ship the shipment + shipment.complete_shipment(self.user) + + # Ok, now we should be able to "complete" the shipment via the API + # The 'SALESORDER_SHIP_COMPLETE' setting determines if the outcome is "SHIPPED" or "COMPLETE" + InvenTreeSetting.set_setting('SALESORDER_SHIP_COMPLETE', False) + + url = reverse('api-so-complete', kwargs={'pk': so.pk}) + self.post(url, {}, expected_code=201) + + so.refresh_from_db() + self.assertEqual(so.status, SalesOrderStatus.SHIPPED.value) + + # Now, let's try to "complete" the shipment again + # This time it should get marked as "COMPLETE" + self.post(url, {}, expected_code=201) + + so.refresh_from_db() + self.assertEqual(so.status, SalesOrderStatus.COMPLETE.value) + + # 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)) + + # Next, we'll change the setting so that the order status jumps straight to "complete" + so.status = SalesOrderStatus.PENDING.value + so.save() + so.refresh_from_db() + self.assertEqual(so.status, SalesOrderStatus.PENDING.value) + + InvenTreeSetting.set_setting('SALESORDER_SHIP_COMPLETE', True) + + self.post(url, {}, expected_code=201) + + # The orders status should now be "complete" (not "shipped") + so.refresh_from_db() + self.assertEqual(so.status, SalesOrderStatus.COMPLETE.value) + class SalesOrderLineItemTest(OrderTest): """Tests for the SalesOrderLineItem API.""" @@ -1570,7 +1641,7 @@ class SalesOrderDownloadTest(OrderTest): expected_fn='InvenTree_SalesOrders.xls', decode=False, ) as file: - self.assertTrue(isinstance(file, io.BytesIO)) + self.assertIsInstance(file, io.BytesIO) def test_download_csv(self): """Test that the list of sales orders can be downloaded as a .csv file.""" @@ -1772,7 +1843,7 @@ class SalesOrderAllocateTest(OrderTest): # 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.assertNotEquals(allocation.item.part.pk, allocation.line.part.pk) + self.assertNotEqual(allocation.item.part.pk, allocation.line.part.pk) def test_shipment_complete(self): """Test that we can complete a shipment via the API.""" diff --git a/src/backend/InvenTree/order/test_migrations.py b/src/backend/InvenTree/order/test_migrations.py index 407468cd51..7eafd2032f 100644 --- a/src/backend/InvenTree/order/test_migrations.py +++ b/src/backend/InvenTree/order/test_migrations.py @@ -2,7 +2,7 @@ from django_test_migrations.contrib.unittest_case import MigratorTestCase -from InvenTree.status_codes import SalesOrderStatus +from order.status_codes import SalesOrderStatus class TestRefIntMigrations(MigratorTestCase): diff --git a/src/backend/InvenTree/order/test_sales_order.py b/src/backend/InvenTree/order/test_sales_order.py index da8bcecb0e..b394147971 100644 --- a/src/backend/InvenTree/order/test_sales_order.py +++ b/src/backend/InvenTree/order/test_sales_order.py @@ -211,7 +211,7 @@ class SalesOrderTest(TestCase): self.order.can_complete(raise_error=True) # Now try to ship it - should fail - result = self.order.complete_order(None) + result = self.order.ship_order(None) self.assertFalse(result) def test_complete_order(self): @@ -225,8 +225,8 @@ class SalesOrderTest(TestCase): self.assertEqual(SalesOrderAllocation.objects.count(), 2) - # Attempt to complete the order (but shipments are not completed!) - result = self.order.complete_order(None) + # Attempt to ship the order (but shipments are not completed!) + result = self.order.ship_order(None) self.assertFalse(result) @@ -238,7 +238,7 @@ class SalesOrderTest(TestCase): self.assertTrue(self.shipment.is_complete()) # Now, should be OK to ship - result = self.order.complete_order(None) + result = self.order.ship_order(None) self.assertTrue(result) diff --git a/src/backend/InvenTree/order/tests.py b/src/backend/InvenTree/order/tests.py index 1b6cdb9081..c797149ae5 100644 --- a/src/backend/InvenTree/order/tests.py +++ b/src/backend/InvenTree/order/tests.py @@ -14,7 +14,7 @@ from djmoney.money import Money import common.models import order.tasks from company.models import Company, SupplierPart -from InvenTree.status_codes import PurchaseOrderStatus +from order.status_codes import PurchaseOrderStatus from part.models import Part from stock.models import StockItem, StockLocation from users.models import Owner diff --git a/src/backend/InvenTree/part/admin.py b/src/backend/InvenTree/part/admin.py index c0d32fb0a2..e526dfc7ab 100644 --- a/src/backend/InvenTree/part/admin.py +++ b/src/backend/InvenTree/part/admin.py @@ -250,6 +250,8 @@ class PartAdmin(ImportExportModelAdmin): 'category', 'default_location', 'default_supplier', + 'bom_checked_by', + 'creation_user', ] inlines = [PartParameterInline] @@ -260,7 +262,7 @@ class PartPricingAdmin(admin.ModelAdmin): list_display = ('part', 'overall_min', 'overall_max') - autcomplete_fields = ['part'] + autocomplete_fields = ['part'] class PartStocktakeAdmin(admin.ModelAdmin): diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index df0a3451f4..327a03e75d 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -4,7 +4,6 @@ import functools import re from django.db.models import Count, F, Q -from django.http import JsonResponse from django.urls import include, path, re_path from django.utils.translation import gettext_lazy as _ @@ -19,6 +18,7 @@ from rest_framework.response import Response import order.models import part.filters from build.models import Build, BuildItem +from build.status_codes import BuildStatusGroups from InvenTree.api import ( APIDownloadMixin, AttachmentMixin, @@ -27,18 +27,13 @@ from InvenTree.api import ( ) from InvenTree.filters import ( ORDER_FILTER, + ORDER_FILTER_ALIAS, SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter, InvenTreeSearchFilter, ) -from InvenTree.helpers import ( - DownloadFile, - increment_serial_number, - is_ajax, - isNull, - str2bool, -) +from InvenTree.helpers import DownloadFile, increment_serial_number, isNull, str2bool from InvenTree.mixins import ( CreateAPI, CustomRetrieveUpdateDestroyAPI, @@ -51,11 +46,7 @@ from InvenTree.mixins import ( ) from InvenTree.permissions import RolePermission from InvenTree.serializers import EmptySerializer -from InvenTree.status_codes import ( - BuildStatusGroups, - PurchaseOrderStatusGroups, - SalesOrderStatusGroups, -) +from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups from part.admin import PartCategoryResource, PartResource from stock.models import StockLocation @@ -310,10 +301,12 @@ class CategoryTree(ListAPI): queryset = PartCategory.objects.all() serializer_class = part_serializers.CategoryTree - filter_backends = ORDER_FILTER + filter_backends = ORDER_FILTER_ALIAS ordering_fields = ['level', 'name', 'subcategories'] + ordering_field_aliases = {'level': ['level', 'name'], 'name': ['name', 'level']} + # Order by tree level (top levels first) and then name ordering = ['level', 'name'] @@ -446,7 +439,8 @@ class PartTestTemplateFilter(rest_filters.FilterSet): def filter_part(self, queryset, name, part): """Filter by the 'part' field. - Note that for the 'part' field, we also include any parts "above" the specified part. + Note: If the 'include_inherited' query parameter is set, + we also include any parts "above" the specified part. """ include_inherited = str2bool( self.request.query_params.get('include_inherited', True) @@ -1113,6 +1107,42 @@ class PartFilter(rest_filters.FilterSet): label='Default Location', queryset=StockLocation.objects.all() ) + bom_valid = rest_filters.BooleanFilter( + label=_('BOM Valid'), method='filter_bom_valid' + ) + + def filter_bom_valid(self, queryset, name, value): + """Filter by whether the BOM for the part is valid or not.""" + # Limit queryset to active assemblies + queryset = queryset.filter(active=True, assembly=True).distinct() + + # Iterate through the queryset + # TODO: We should cache BOM checksums to make this process more efficient + pks = [] + + for part in queryset: + if part.is_bom_valid() == value: + pks.append(part.pk) + + return queryset.filter(pk__in=pks) + + starred = rest_filters.BooleanFilter(label='Starred', method='filter_starred') + + def filter_starred(self, queryset, name, value): + """Filter by whether the Part is 'starred' by the current user.""" + if self.request.user.is_anonymous: + return queryset + + starred_parts = [ + star.part.pk + for star in self.request.user.starred_parts.all().prefetch_related('part') + ] + + if value: + return queryset.filter(pk__in=starred_parts) + else: + return queryset.exclude(pk__in=starred_parts) + is_template = rest_filters.BooleanFilter() assembly = rest_filters.BooleanFilter() @@ -1149,7 +1179,6 @@ class PartMixin: queryset = Part.objects.all() starred_parts = None - is_create = False def get_queryset(self, *args, **kwargs): @@ -1216,33 +1245,6 @@ class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): return DownloadFile(filedata, filename) - def list(self, request, *args, **kwargs): - """Override the 'list' method, as the PartCategory objects are very expensive to serialize! - - So we will serialize them first, and keep them in memory, so that they do not have to be serialized multiple times... - """ - queryset = self.filter_queryset(self.get_queryset()) - - page = self.paginate_queryset(queryset) - - if page is not None: - serializer = self.get_serializer(page, many=True) - else: - serializer = self.get_serializer(queryset, many=True) - - data = serializer.data - - """ - Determine the response type based on the request. - a) For HTTP requests (e.g. via the browsable API) return a DRF response - b) For AJAX requests, simply return a JSON rendered response. - """ - if page is not None: - return self.get_paginated_response(data) - elif is_ajax(request): - return JsonResponse(data, safe=False) - return Response(data) - def filter_queryset(self, queryset): """Perform custom filtering of the queryset.""" params = self.request.query_params @@ -1269,26 +1271,6 @@ class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): queryset = queryset.exclude(pk__in=id_values) - # Filter by whether the BOM has been validated (or not) - bom_valid = params.get('bom_valid', None) - - # TODO: Querying bom_valid status may be quite expensive - # TODO: (It needs to be profiled!) - # TODO: It might be worth caching the bom_valid status to a database column - if bom_valid is not None: - bom_valid = str2bool(bom_valid) - - # Limit queryset to active assemblies - queryset = queryset.filter(active=True, assembly=True) - - pks = [] - - for prt in queryset: - if prt.is_bom_valid() == bom_valid: - pks.append(prt.pk) - - queryset = queryset.filter(pk__in=pks) - # Filter by 'related' parts? related = params.get('related', None) exclude_related = params.get('exclude_related', None) @@ -1322,20 +1304,6 @@ class PartList(PartMixin, APIDownloadMixin, ListCreateAPI): except (ValueError, Part.DoesNotExist): pass - # Filter by 'starred' parts? - starred = params.get('starred', None) - - if starred is not None: - starred = str2bool(starred) - starred_parts = [ - star.part.pk for star in self.request.user.starred_parts.all() - ] - - if starred: - queryset = queryset.filter(pk__in=starred_parts) - else: - queryset = queryset.exclude(pk__in=starred_parts) - # Cascade? (Default = True) cascade = str2bool(params.get('cascade', True)) @@ -1446,21 +1414,6 @@ class PartChangeCategory(CreateAPI): class PartDetail(PartMixin, RetrieveUpdateDestroyAPI): """API endpoint for detail view of a single Part object.""" - def destroy(self, request, *args, **kwargs): - """Delete a Part instance via the API. - - - If the part is 'active' it cannot be deleted - - It must first be marked as 'inactive' - """ - part = Part.objects.get(pk=int(kwargs['pk'])) - # Check if inactive - if not part.active: - # Delete - return super(PartDetail, self).destroy(request, *args, **kwargs) - # Return 405 error - message = 'Part is active: cannot delete' - return Response(status=status.HTTP_405_METHOD_NOT_ALLOWED, data=message) - def update(self, request, *args, **kwargs): """Custom update functionality for Part instance. @@ -1905,30 +1858,6 @@ class BomList(BomMixin, ListCreateDestroyAPIView): filterset_class = BomFilter - def list(self, request, *args, **kwargs): - """Return serialized list response for this endpoint.""" - queryset = self.filter_queryset(self.get_queryset()) - - page = self.paginate_queryset(queryset) - - if page is not None: - serializer = self.get_serializer(page, many=True) - else: - serializer = self.get_serializer(queryset, many=True) - - data = serializer.data - - """ - Determine the response type based on the request. - a) For HTTP requests (e.g. via the browsable API) return a DRF response - b) For AJAX requests, simply return a JSON rendered response. - """ - if page is not None: - return self.get_paginated_response(data) - elif is_ajax(request): - return JsonResponse(data, safe=False) - return Response(data) - filter_backends = SEARCH_ORDER_FILTER_ALIAS search_fields = [ diff --git a/src/backend/InvenTree/part/filters.py b/src/backend/InvenTree/part/filters.py index 4d247529b9..0b9fafb983 100644 --- a/src/backend/InvenTree/part/filters.py +++ b/src/backend/InvenTree/part/filters.py @@ -40,11 +40,8 @@ from sql_util.utils import SubquerySum import part.models import stock.models -from InvenTree.status_codes import ( - BuildStatusGroups, - PurchaseOrderStatusGroups, - SalesOrderStatusGroups, -) +from build.status_codes import BuildStatusGroups +from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups def annotate_in_production_quantity(reference=''): diff --git a/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py b/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py index 911766ad6d..8bf472e4cb 100644 --- a/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py +++ b/src/backend/InvenTree/part/migrations/0055_auto_20201110_1001.py @@ -2,7 +2,7 @@ from django.db import migrations import djmoney.models.fields -import common.settings +import common.currency class Migration(migrations.Migration): @@ -16,11 +16,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='partsellpricebreak', name='price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price'), ), migrations.AddField( model_name='partsellpricebreak', name='price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py b/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py index f0e8561730..d8dc4f3c56 100644 --- a/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py +++ b/src/backend/InvenTree/part/migrations/0067_partinternalpricebreak.py @@ -2,6 +2,7 @@ import InvenTree.fields import django.core.validators +import common.currency import common.settings from django.db import migrations, models import django.db.models.deletion @@ -20,8 +21,8 @@ class Migration(migrations.Migration): 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='Price break quantity', max_digits=15, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Quantity')), - ('price_currency', djmoney.models.fields.CurrencyField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default(), editable=False, max_length=3)), - ('price', djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price')), + ('price_currency', djmoney.models.fields.CurrencyField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default(), editable=False, max_length=3)), + ('price', djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Unit price at specified quantity', max_digits=19, null=True, verbose_name='Price')), ('part', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='internalpricebreaks', to='part.part', verbose_name='Part')), ], options={ diff --git a/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py b/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py index 7d25a1f558..865153ffe2 100644 --- a/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py +++ b/src/backend/InvenTree/part/migrations/0089_auto_20221112_0128.py @@ -1,13 +1,14 @@ # Generated by Django 3.2.16 on 2022-11-12 01:28 -import InvenTree.fields -import common.settings import django.core.validators from django.db import migrations, models import django.db.models.deletion import djmoney.models.fields import djmoney.models.validators +import InvenTree.fields +import common.currency +import common.settings class Migration(migrations.Migration): @@ -35,7 +36,7 @@ class Migration(migrations.Migration): name='PartPricing', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('currency', models.CharField(choices=common.settings.currency_code_mappings(), default=common.settings.currency_code_default, help_text='Currency used to cache pricing calculations', max_length=10, verbose_name='Currency')), + ('currency', models.CharField(choices=common.currency.currency_code_mappings(), default=common.currency.currency_code_default, help_text='Currency used to cache pricing calculations', max_length=10, verbose_name='Currency')), ('updated', models.DateTimeField(auto_now=True, help_text='Timestamp of last pricing update', verbose_name='Updated')), ('scheduled_for_update', models.BooleanField(default=False)), ('bom_cost_min_currency', djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3)), diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index b0e020efa3..cd0282b908 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -7,7 +7,7 @@ import hashlib import logging import os import re -from datetime import datetime, timedelta +from datetime import timedelta from decimal import Decimal, InvalidOperation from django.conf import settings @@ -33,6 +33,7 @@ from mptt.models import MPTTModel, TreeForeignKey from stdimage.models import StdImageField from taggit.managers import TaggableManager +import common.currency import common.models import common.settings import InvenTree.conversion @@ -43,22 +44,23 @@ import InvenTree.ready import InvenTree.tasks import part.helpers as part_helpers import part.settings as part_settings +import report.mixins import users.models from build import models as BuildModels +from build.status_codes import BuildStatusGroups +from common.currency import currency_code_default from common.models import InvenTreeSetting -from common.settings import currency_code_default from company.models import SupplierPart from InvenTree import helpers, validators from InvenTree.fields import InvenTreeURLField from InvenTree.helpers import decimal2money, decimal2string, normalize, str2bool -from InvenTree.status_codes import ( - BuildStatusGroups, +from order import models as OrderModels +from order.status_codes import ( PurchaseOrderStatus, PurchaseOrderStatusGroups, SalesOrderStatus, SalesOrderStatusGroups, ) -from order import models as OrderModels from stock import models as StockModels logger = logging.getLogger('inventree') @@ -281,7 +283,7 @@ class PartCategory(InvenTree.models.InvenTreeTree): """Returns True if the specified user subscribes to this category.""" return user in self.get_subscribers(**kwargs) - def set_starred(self, user, status): + def set_starred(self, user, status: bool) -> None: """Set the "subscription" status of this PartCategory against the specified user.""" if not user: return @@ -340,6 +342,7 @@ class PartManager(TreeManager): class Part( InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, + report.mixins.InvenTreeReportMixin, InvenTree.models.MetadataMixin, InvenTree.models.PluginValidationMixin, MPTTModel, @@ -409,8 +412,28 @@ class Part( """Return API query filters for limiting field results against this instance.""" return {'variant_of': {'exclude_tree': self.pk}} + def report_context(self): + """Return custom report context information.""" + return { + 'bom_items': self.get_bom_items(), + 'category': self.category, + 'description': self.description, + 'IPN': self.IPN, + 'name': self.name, + 'parameters': self.parameters_map(), + 'part': self, + 'qr_data': self.format_barcode(brief=True), + 'qr_url': self.get_absolute_url(), + 'revision': self.revision, + 'test_template_list': self.getTestTemplates(), + 'test_templates': self.getTestTemplates(), + } + def get_context_data(self, request, **kwargs): - """Return some useful context data about this part for template rendering.""" + """Return some useful context data about this part for template rendering. + + TODO: 2024-04-21 - Remove this method once the legacy UI code is removed + """ context = {} context['disabled'] = not self.active @@ -448,6 +471,27 @@ class Part( return context + def delete(self, **kwargs): + """Custom delete method for the Part model. + + Prevents deletion of a Part if any of the following conditions are met: + + - The part is still active + - The part is used in a BOM for a different part. + """ + if self.active: + raise ValidationError(_('Cannot delete this part as it is still active')) + + if not common.models.InvenTreeSetting.get_setting( + 'PART_ALLOW_DELETE_FROM_ASSEMBLY', cache=False + ): + if BomItem.objects.filter(sub_part=self).exists(): + raise ValidationError( + _('Cannot delete this part as it is used in an assembly') + ) + + super().delete() + def save(self, *args, **kwargs): """Overrides the save function for the Part model. @@ -1975,7 +2019,7 @@ class Part( help_text=_('Sell multiple'), ) - get_price = common.models.get_price + get_price = common.currency.get_price @property def has_price_breaks(self): @@ -2007,7 +2051,7 @@ class Part( def get_internal_price(self, quantity, moq=True, multiples=True, currency=None): """Return the internal price of this Part at the specified quantity.""" - return common.models.get_price( + return common.currency.get_price( self, quantity, moq, multiples, currency, break_name='internal_price_breaks' ) @@ -2603,7 +2647,7 @@ class PartPricing(common.models.MetaMixin): # Short circuit - no further operations required return - currency_code = common.settings.currency_code_default() + currency_code = common.currency.currency_code_default() cumulative_min = Money(0, currency_code) cumulative_max = Money(0, currency_code) @@ -2705,15 +2749,11 @@ class PartPricing(common.models.MetaMixin): purchase_max = purchase_cost # Also check if manual stock item pricing is included - if InvenTreeSetting.get_setting('PRICING_USE_STOCK_PRICING', True, cache=False): + if InvenTreeSetting.get_setting('PRICING_USE_STOCK_PRICING', True): items = self.part.stock_items.all() # Limit to stock items updated within a certain window - days = int( - InvenTreeSetting.get_setting( - 'PRICING_STOCK_ITEM_AGE_DAYS', 0, cache=False - ) - ) + days = int(InvenTreeSetting.get_setting('PRICING_STOCK_ITEM_AGE_DAYS', 0)) if days > 0: date_threshold = InvenTree.helpers.current_date() - timedelta(days=days) @@ -2749,7 +2789,7 @@ class PartPricing(common.models.MetaMixin): min_int_cost = None max_int_cost = None - if InvenTreeSetting.get_setting('PART_INTERNAL_PRICE', False, cache=False): + if InvenTreeSetting.get_setting('PART_INTERNAL_PRICE', False): # Only calculate internal pricing if internal pricing is enabled for pb in self.part.internalpricebreaks.all(): cost = self.convert(pb.price) @@ -2868,12 +2908,10 @@ class PartPricing(common.models.MetaMixin): max_costs = [self.bom_cost_max, self.purchase_cost_max, self.internal_cost_max] purchase_history_override = InvenTreeSetting.get_setting( - 'PRICING_PURCHASE_HISTORY_OVERRIDES_SUPPLIER', False, cache=False + 'PRICING_PURCHASE_HISTORY_OVERRIDES_SUPPLIER', False ) - if InvenTreeSetting.get_setting( - 'PRICING_USE_SUPPLIER_PRICING', True, cache=False - ): + if InvenTreeSetting.get_setting('PRICING_USE_SUPPLIER_PRICING', True): # Add supplier pricing data, *unless* historical pricing information should override if self.purchase_cost_min is None or not purchase_history_override: min_costs.append(self.supplier_price_min) @@ -2881,9 +2919,7 @@ class PartPricing(common.models.MetaMixin): if self.purchase_cost_max is None or not purchase_history_override: max_costs.append(self.supplier_price_max) - if InvenTreeSetting.get_setting( - 'PRICING_USE_VARIANT_PRICING', True, cache=False - ): + if InvenTreeSetting.get_setting('PRICING_USE_VARIANT_PRICING', True): # Include variant pricing in overall calculations min_costs.append(self.variant_cost_min) max_costs.append(self.variant_cost_max) @@ -2910,9 +2946,7 @@ class PartPricing(common.models.MetaMixin): if overall_max is None or cost > overall_max: overall_max = cost - if InvenTreeSetting.get_setting( - 'PART_BOM_USE_INTERNAL_PRICE', False, cache=False - ): + if InvenTreeSetting.get_setting('PART_BOM_USE_INTERNAL_PRICE', False): # Check if internal pricing should override other pricing if self.internal_cost_min is not None: overall_min = self.internal_cost_min @@ -2992,7 +3026,7 @@ class PartPricing(common.models.MetaMixin): max_length=10, verbose_name=_('Currency'), help_text=_('Currency used to cache pricing calculations'), - choices=common.settings.currency_code_mappings(), + choices=common.currency.currency_code_mappings(), ) scheduled_for_update = models.BooleanField(default=False) @@ -4257,7 +4291,7 @@ class BomItem( """Return the price-range for this BOM item.""" # get internal price setting use_internal = common.models.InvenTreeSetting.get_setting( - 'PART_BOM_USE_INTERNAL_PRICE', False, cache=False + 'PART_BOM_USE_INTERNAL_PRICE', False ) prange = self.sub_part.get_price_range( self.quantity, internal=use_internal and internal diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 7bed55d416..9575c2c329 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -21,6 +21,7 @@ from rest_framework import serializers from sql_util.utils import SubqueryCount, SubquerySum from taggit.serializers import TagListSerializerField +import common.currency import common.models import common.settings import company.models @@ -33,7 +34,7 @@ import part.stocktake import part.tasks import stock.models import users.models -from InvenTree.status_codes import BuildStatusGroups +from build.status_codes import BuildStatusGroups from InvenTree.tasks import offload_task from .models import ( @@ -432,6 +433,11 @@ class DuplicatePartSerializer(serializers.Serializer): The fields in this serializer control how the Part is duplicated. """ + class Meta: + """Metaclass options.""" + + fields = ['part', 'copy_image', 'copy_bom', 'copy_parameters', 'copy_notes'] + part = serializers.PrimaryKeyRelatedField( queryset=Part.objects.all(), label=_('Original Part'), @@ -471,6 +477,11 @@ class DuplicatePartSerializer(serializers.Serializer): class InitialStockSerializer(serializers.Serializer): """Serializer for creating initial stock quantity.""" + class Meta: + """Metaclass options.""" + + fields = ['quantity', 'location'] + quantity = serializers.DecimalField( max_digits=15, decimal_places=5, @@ -494,6 +505,11 @@ class InitialStockSerializer(serializers.Serializer): class InitialSupplierSerializer(serializers.Serializer): """Serializer for adding initial supplier / manufacturer information.""" + class Meta: + """Metaclass options.""" + + fields = ['supplier', 'sku', 'manufacturer', 'mpn'] + supplier = serializers.PrimaryKeyRelatedField( queryset=company.models.Company.objects.all(), label=_('Supplier'), @@ -564,6 +580,7 @@ class InitialSupplierSerializer(serializers.Serializer): class PartSerializer( + InvenTree.serializers.NotesFieldMixin, InvenTree.serializers.RemoteImageMixin, InvenTree.serializers.InvenTreeTagModelSerializer, ): @@ -836,7 +853,9 @@ class PartSerializer( starred = serializers.SerializerMethodField() # PrimaryKeyRelated fields (Note: enforcing field type here results in much faster queries, somehow...) - category = serializers.PrimaryKeyRelatedField(queryset=PartCategory.objects.all()) + category = serializers.PrimaryKeyRelatedField( + queryset=PartCategory.objects.all(), required=False, allow_null=True + ) # Pricing fields pricing_min = InvenTree.serializers.InvenTreeMoneySerializer( @@ -1269,7 +1288,7 @@ class PartPricingSerializer(InvenTree.serializers.InvenTreeModelSerializer): label=_('Minimum price currency'), read_only=False, required=False, - choices=common.settings.currency_code_mappings(), + choices=common.currency.currency_code_mappings(), ) override_max = InvenTree.serializers.InvenTreeMoneySerializer( @@ -1284,7 +1303,7 @@ class PartPricingSerializer(InvenTree.serializers.InvenTreeModelSerializer): label=_('Maximum price currency'), read_only=False, required=False, - choices=common.settings.currency_code_mappings(), + choices=common.currency.currency_code_mappings(), ) overall_min = InvenTree.serializers.InvenTreeMoneySerializer( @@ -1325,7 +1344,7 @@ class PartPricingSerializer(InvenTree.serializers.InvenTreeModelSerializer): override_min = data.get('override_min', None) override_max = data.get('override_max', None) - default_currency = common.settings.currency_code_default() + default_currency = common.currency.currency_code_default() if override_min is not None and override_max is not None: try: diff --git a/src/backend/InvenTree/part/stocktake.py b/src/backend/InvenTree/part/stocktake.py index 1bdd41f977..3705d84ae0 100644 --- a/src/backend/InvenTree/part/stocktake.py +++ b/src/backend/InvenTree/part/stocktake.py @@ -13,6 +13,7 @@ import tablib from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money +import common.currency import common.models import InvenTree.helpers import part.models @@ -67,7 +68,7 @@ def perform_stocktake( pricing.update_pricing(cascade=False) pricing.refresh_from_db() - base_currency = common.settings.currency_code_default() + base_currency = common.currency.currency_code_default() # Keep track of total quantity and cost for this part total_quantity = 0 @@ -210,7 +211,7 @@ def generate_stocktake_report(**kwargs): logger.info('Generating new stocktake report for %s parts', n_parts) - base_currency = common.settings.currency_code_default() + base_currency = common.currency.currency_code_default() # Construct an initial dataset for the stocktake report dataset = tablib.Dataset( diff --git a/src/backend/InvenTree/part/tasks.py b/src/backend/InvenTree/part/tasks.py index 51a2d63547..768be1a440 100644 --- a/src/backend/InvenTree/part/tasks.py +++ b/src/backend/InvenTree/part/tasks.py @@ -8,6 +8,7 @@ from datetime import datetime, timedelta from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ +import common.currency import common.models import common.notifications import common.settings @@ -110,7 +111,7 @@ def check_missing_pricing(limit=250): pp.schedule_for_update() # Find any pricing data which is in the wrong currency - currency = common.settings.currency_code_default() + currency = common.currency.currency_code_default() results = part.models.PartPricing.objects.exclude(currency=currency) if results.count() > 0: diff --git a/src/backend/InvenTree/part/templates/part/detail.html b/src/backend/InvenTree/part/templates/part/detail.html index 4cf36dc387..f65a5e709f 100644 --- a/src/backend/InvenTree/part/templates/part/detail.html +++ b/src/backend/InvenTree/part/templates/part/detail.html @@ -404,6 +404,8 @@ 'part-notes', '{% url "api-part-detail" part.pk %}', { + model_type: "part", + model_id: {{ part.pk }}, editable: {% js_bool roles.part.change %}, } ); @@ -629,11 +631,7 @@ {% if report_enabled %} $("#print-bom-report").click(function() { - printReports({ - items: [{{ part.pk }}], - key: 'part', - url: '{% url "api-bom-report-list" %}' - }); + printReports('part', [{{ part.pk }}]); }); {% endif %} }); diff --git a/src/backend/InvenTree/part/templates/part/part_base.html b/src/backend/InvenTree/part/templates/part/part_base.html index 16ce73b291..3b6b57542d 100644 --- a/src/backend/InvenTree/part/templates/part/part_base.html +++ b/src/backend/InvenTree/part/templates/part/part_base.html @@ -468,9 +468,8 @@ $('#print-label').click(function() { printLabels({ items: [{{ part.pk }}], - key: 'part', + model_type: 'part', singular_name: 'part', - url: '{% url "api-part-label-list" %}', }); }); {% endif %} diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 9459ee3bae..7d998e0033 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -19,11 +19,12 @@ from rest_framework.test import APIClient import build.models import company.models import order.models +from build.status_codes import BuildStatus from common.models import InvenTreeSetting from company.models import Company, SupplierPart from InvenTree.settings import BASE_DIR -from InvenTree.status_codes import BuildStatus, PurchaseOrderStatusGroups, StockStatus from InvenTree.unit_test import InvenTreeAPITestCase +from order.status_codes import PurchaseOrderStatusGroups from part.models import ( BomItem, BomItemSubstitute, @@ -37,6 +38,7 @@ from part.models import ( PartTestTemplate, ) from stock.models import StockItem, StockLocation +from stock.status_codes import StockStatus class PartCategoryAPITest(InvenTreeAPITestCase): @@ -371,8 +373,6 @@ class PartCategoryAPITest(InvenTreeAPITestCase): params['delete_child_categories'] = '1' response = self.delete(url, params, expected_code=204) - self.assertEqual(response.status_code, 204) - if delete_parts: if i == Target.delete_subcategories_delete_parts: # Check if all parts deleted @@ -463,12 +463,12 @@ class PartCategoryAPITest(InvenTreeAPITestCase): response = self.get(url, {'path_detail': False}, expected_code=200) # Check that the path detail information is not included - self.assertFalse('path' in response.data.keys()) + self.assertNotIn('path', response.data.keys()) # Now, request *with* path detail response = self.get(url, {'path_detail': True}, expected_code=200) - self.assertTrue('path' in response.data.keys()) + self.assertIn('path', response.data.keys()) path = response.data['path'] @@ -520,7 +520,7 @@ class PartOptionsAPITest(InvenTreeAPITestCase): # Check that a bunch o' fields are contained for f in ['assembly', 'component', 'description', 'image', 'IPN']: - self.assertTrue(f in actions.keys()) + self.assertIn(f, actions.keys()) # Active is a 'boolean' field active = actions['active'] @@ -541,19 +541,64 @@ class PartOptionsAPITest(InvenTreeAPITestCase): category = actions['category'] self.assertEqual(category['type'], 'related field') - self.assertTrue(category['required']) + self.assertFalse(category['required']) self.assertFalse(category['read_only']) self.assertEqual(category['label'], 'Category') self.assertEqual(category['model'], 'partcategory') self.assertEqual(category['api_url'], reverse('api-part-category-list')) self.assertEqual(category['help_text'], 'Part category') + def test_part_label_translation(self): + """Test that 'label' values are correctly translated.""" + response = self.options(reverse('api-part-list')) + + labels = { + 'IPN': 'IPN', + 'category': 'Category', + 'assembly': 'Assembly', + 'ordering': 'On Order', + 'stock_item_count': 'Stock Items', + } + + help_text = { + 'IPN': 'Internal Part Number', + 'active': 'Is this part active?', + 'barcode_hash': 'Unique hash of barcode data', + 'category': 'Part category', + } + + # Check basic return values + for field, value in labels.items(): + self.assertEqual(response.data['actions']['POST'][field]['label'], value) + + for field, value in help_text.items(): + self.assertEqual( + response.data['actions']['POST'][field]['help_text'], value + ) + + # Check again, with a different locale + response = self.options( + reverse('api-part-list'), headers={'Accept-Language': 'de'} + ) + + translated = { + 'IPN': 'IPN (Interne Produktnummer)', + 'category': 'Kategorie', + 'assembly': 'Baugruppe', + 'ordering': 'Bestellt', + 'stock_item_count': 'Lagerartikel', + } + + for field, value in translated.items(): + label = response.data['actions']['POST'][field]['label'] + self.assertEqual(label, value) + def test_category(self): """Test the PartCategory API OPTIONS endpoint.""" actions = self.getActions(reverse('api-part-category-list')) # actions should *not* contain 'POST' as we do not have the correct role - self.assertFalse('POST' in actions) + self.assertNotIn('POST', actions) self.assignRole('part_category.add') @@ -640,7 +685,6 @@ class PartAPITest(PartAPITestBase): # Request *all* part categories response = self.get(url) - self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 8) # Request top-level part categories only @@ -664,7 +708,6 @@ class PartAPITest(PartAPITestBase): url = reverse('api-part-category-list') response = self.post(url, data) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) parent = response.data['pk'] @@ -672,7 +715,6 @@ class PartAPITest(PartAPITestBase): for animal in ['cat', 'dog', 'zebra']: data = {'name': animal, 'description': 'A sort of animal', 'parent': parent} response = self.post(url, data) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(response.data['parent'], parent) self.assertEqual(response.data['name'], animal) self.assertEqual(response.data['pathstring'], 'Animals/' + animal) @@ -696,7 +738,6 @@ class PartAPITest(PartAPITestBase): data['parent'] = None data['description'] = 'Changing the description' response = self.patch(url, data) - self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data['description'], 'Changing the description') self.assertIsNone(response.data['parent']) @@ -705,13 +746,11 @@ class PartAPITest(PartAPITestBase): url = reverse('api-part-list') data = {'cascade': True} response = self.get(url, data) - self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), Part.objects.count()) # Test filtering parts by category data = {'category': 2} response = self.get(url, data) - self.assertEqual(response.status_code, status.HTTP_200_OK) # There should only be 2 objects in category C self.assertEqual(len(response.data), 2) @@ -747,6 +786,50 @@ class PartAPITest(PartAPITestBase): response = self.get(url, {'related': 1}, expected_code=200) self.assertEqual(len(response.data), 2) + def test_filter_by_bom_valid(self): + """Test the 'bom_valid' Part API filter.""" + url = reverse('api-part-list') + + n = Part.objects.filter(active=True, assembly=True).count() + + # Initially, there are no parts with a valid BOM + response = self.get(url, {'bom_valid': False}, expected_code=200) + n1 = len(response.data) + + for item in response.data: + self.assertTrue(item['assembly']) + self.assertTrue(item['active']) + + response = self.get(url, {'bom_valid': True}, expected_code=200) + n2 = len(response.data) + + self.assertEqual(n1 + n2, n) + + def test_filter_by_starred(self): + """Test by 'starred' filter.""" + url = reverse('api-part-list') + + # All parts + n = Part.objects.count() + + # Initially, there are no starred parts + response = self.get(url, {'starred': True}, expected_code=200) + self.assertEqual(len(response.data), 0) + + response = self.get(url, {'starred': False, 'limit': 1}, expected_code=200) + self.assertEqual(response.data['count'], n) + + # Star a part + part = Part.objects.first() + part.set_starred(self.user, True) + + # Fetch data again + response = self.get(url, {'starred': True}, expected_code=200) + self.assertEqual(len(response.data), 1) + + response = self.get(url, {'starred': False, 'limit': 1}, expected_code=200) + self.assertEqual(response.data['count'], n - 1) + def test_filter_by_convert(self): """Test that we can correctly filter the Part list by conversion options.""" category = PartCategory.objects.get(pk=3) @@ -808,7 +891,6 @@ class PartAPITest(PartAPITestBase): response = self.get(url, data) # Now there should be 5 total parts - self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 3) def test_test_templates(self): @@ -817,8 +899,6 @@ class PartAPITest(PartAPITestBase): # List ALL items response = self.get(url) - - self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 9) # Request for a particular part @@ -832,10 +912,9 @@ class PartAPITest(PartAPITestBase): response = self.post( url, data={'part': 10000, 'test_name': 'My very first test', 'required': False}, + expected_code=400, ) - self.assertEqual(response.status_code, 400) - # Try to post a new object (should succeed) response = self.post( url, @@ -847,20 +926,17 @@ class PartAPITest(PartAPITestBase): }, ) - self.assertEqual(response.status_code, status.HTTP_201_CREATED) - # Try to post a new test with the same name (should fail) response = self.post( url, data={'part': 10004, 'test_name': ' newtest', 'description': 'dafsdf'}, + expected_code=400, ) - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - # Try to post a new test against a non-trackable part (should fail) - response = self.post(url, data={'part': 1, 'test_name': 'A simple test'}) - - self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + response = self.post( + url, data={'part': 1, 'test_name': 'A simple test'}, expected_code=400 + ) def test_get_thumbs(self): """Return list of part thumbnails.""" @@ -868,8 +944,6 @@ class PartAPITest(PartAPITestBase): response = self.get(url) - self.assertEqual(response.status_code, status.HTTP_200_OK) - def test_paginate(self): """Test pagination of the Part list API.""" for n in [1, 5, 10]: @@ -1055,8 +1129,8 @@ class PartAPITest(PartAPITestBase): # Filter by creation date response = self.get(url, {'created_before': '2019-01-01'}, expected_code=200) - self.assertTrue(len(response.data) < n) - self.assertTrue(len(response.data) > 0) + self.assertLess(len(response.data), n) + self.assertGreater(len(response.data), 0) for item in response.data: self.assertIsNotNone(item['creation_date']) @@ -1066,8 +1140,8 @@ class PartAPITest(PartAPITestBase): response = self.get(url, {'created_after': '2019-01-01'}, expected_code=200) - self.assertTrue(len(response.data) < n) - self.assertTrue(len(response.data) > 0) + self.assertLess(len(response.data), n) + self.assertGreater(len(response.data), 0) for item in response.data: self.assertIsNotNone(item['creation_date']) @@ -1075,6 +1149,23 @@ class PartAPITest(PartAPITestBase): date = datetime.fromisoformat(item['creation_date']) self.assertGreaterEqual(date, date_compare) + def test_part_notes(self): + """Test the 'notes' field.""" + # First test the 'LIST' endpoint - no notes information provided + url = reverse('api-part-list') + + response = self.get(url, {'limit': 1}, expected_code=200) + data = response.data['results'][0] + + self.assertNotIn('notes', data) + + # Second, test the 'DETAIL' endpoint - notes information provided + url = reverse('api-part-detail', kwargs={'pk': data['pk']}) + + response = self.get(url, expected_code=200) + + self.assertIn('notes', response.data) + class PartCreationTests(PartAPITestBase): """Tests for creating new Part instances via the API.""" @@ -1361,8 +1452,6 @@ class PartDetailTests(PartAPITestBase): }, ) - self.assertEqual(response.status_code, 201) - pk = response.data['pk'] # Check that a new part has been added @@ -1381,7 +1470,6 @@ class PartDetailTests(PartAPITestBase): response = self.patch(url, {'name': 'a new better name'}) - self.assertEqual(response.status_code, 200) self.assertEqual(response.data['pk'], pk) self.assertEqual(response.data['name'], 'a new better name') @@ -1397,24 +1485,17 @@ class PartDetailTests(PartAPITestBase): # 2021-06-22 this test is to check that the "duplicate part" checks don't do strange things response = self.patch(url, {'name': 'a new better name'}) - self.assertEqual(response.status_code, 200) - # Try to remove a tag response = self.patch(url, {'tags': ['tag1']}) - self.assertEqual(response.status_code, 200) self.assertEqual(response.data['tags'], ['tag1']) # Try to remove the part - response = self.delete(url) - - # As the part is 'active' we cannot delete it - self.assertEqual(response.status_code, 405) + response = self.delete(url, expected_code=400) # So, let's make it not active response = self.patch(url, {'active': False}, expected_code=200) response = self.delete(url) - self.assertEqual(response.status_code, 204) # Part count should have reduced self.assertEqual(Part.objects.count(), n) @@ -1433,8 +1514,6 @@ class PartDetailTests(PartAPITestBase): }, ) - self.assertEqual(response.status_code, 201) - n = Part.objects.count() # Check that we cannot create a duplicate in a different category @@ -1447,10 +1526,9 @@ class PartDetailTests(PartAPITestBase): 'category': 2, 'revision': 'A', }, + expected_code=400, ) - self.assertEqual(response.status_code, 400) - # Check that only 1 matching part exists parts = Part.objects.filter( name='part', description='description', IPN='IPN-123' @@ -1471,9 +1549,9 @@ class PartDetailTests(PartAPITestBase): 'category': 2, 'revision': 'B', }, + expected_code=201, ) - self.assertEqual(response.status_code, 201) self.assertEqual(Part.objects.count(), n + 1) # Now, check that we cannot *change* an existing part to conflict @@ -1482,14 +1560,10 @@ class PartDetailTests(PartAPITestBase): url = reverse('api-part-detail', kwargs={'pk': pk}) # Attempt to alter the revision code - response = self.patch(url, {'revision': 'A'}) - - self.assertEqual(response.status_code, 400) + response = self.patch(url, {'revision': 'A'}, expected_code=400) # But we *can* change it to a unique revision code - response = self.patch(url, {'revision': 'C'}) - - self.assertEqual(response.status_code, 200) + response = self.patch(url, {'revision': 'C'}, expected_code=200) def test_image_upload(self): """Test that we can upload an image to the part API.""" @@ -1519,10 +1593,9 @@ class PartDetailTests(PartAPITestBase): with open(f'{test_path}.txt', 'rb') as dummy_image: response = self.upload_client.patch( - url, {'image': dummy_image}, format='multipart' + url, {'image': dummy_image}, format='multipart', expected_code=400 ) - self.assertEqual(response.status_code, 400) self.assertIn('Upload a valid image', str(response.data)) # Now try to upload a valid image file, in multiple formats @@ -1534,11 +1607,9 @@ class PartDetailTests(PartAPITestBase): with open(fn, 'rb') as dummy_image: response = self.upload_client.patch( - url, {'image': dummy_image}, format='multipart' + url, {'image': dummy_image}, format='multipart', expected_code=200 ) - self.assertEqual(response.status_code, 200) - # And now check that the image has been set p = Part.objects.get(pk=pk) self.assertIsNotNone(p.image) @@ -1555,10 +1626,11 @@ class PartDetailTests(PartAPITestBase): with open(fn, 'rb') as img_file: response = self.upload_client.patch( - reverse('api-part-detail', kwargs={'pk': p.pk}), {'image': img_file} + reverse('api-part-detail', kwargs={'pk': p.pk}), + {'image': img_file}, + expected_code=200, ) - self.assertEqual(response.status_code, 200) image_name = response.data['image'] self.assertTrue(image_name.startswith('/media/part_images/part_image')) @@ -1601,10 +1673,11 @@ class PartDetailTests(PartAPITestBase): # Upload the image to a part with open(fn, 'rb') as img_file: response = self.upload_client.patch( - reverse('api-part-detail', kwargs={'pk': p.pk}), {'image': img_file} + reverse('api-part-detail', kwargs={'pk': p.pk}), + {'image': img_file}, + expected_code=200, ) - self.assertEqual(response.status_code, 200) image_name = response.data['image'] self.assertTrue(image_name.startswith('/media/part_images/part_image')) @@ -1860,8 +1933,6 @@ class PartAPIAggregationTest(InvenTreeAPITestCase): response = self.get(url) - self.assertEqual(response.status_code, status.HTTP_200_OK) - for part in response.data: if part['pk'] == self.part.pk: return part @@ -2153,7 +2224,7 @@ class BomItemTest(InvenTreeAPITestCase): response = self.get(url, data={'validated': False}, expected_code=200) # There should be at least one non-validated item - self.assertTrue(len(response.data) > 0) + self.assertGreater(len(response.data), 0) # Now, let's validate an item bom_item = BomItem.objects.first() @@ -2169,7 +2240,7 @@ class BomItemTest(InvenTreeAPITestCase): # Each item in response should contain expected keys for el in response.data: for key in ['available_stock', 'available_substitute_stock']: - self.assertTrue(key in el) + self.assertIn(key, el) def test_bom_list_search(self): """Test that we can search the BOM list API endpoint.""" @@ -2208,7 +2279,7 @@ class BomItemTest(InvenTreeAPITestCase): q1 = response.data[0]['quantity'] q2 = response.data[-1]['quantity'] - self.assertTrue(q1 < q2) + self.assertLess(q1, q2) # Order by decreasing quantity response = self.get(f'{url}?ordering=-quantity', expected_code=200) @@ -2255,7 +2326,7 @@ class BomItemTest(InvenTreeAPITestCase): ] for key in expected_values: - self.assertTrue(key in response.data) + self.assertIn(key, response.data) self.assertEqual(int(float(response.data['quantity'])), 25) @@ -2586,8 +2657,9 @@ class PartInternalPriceBreakTest(InvenTreeAPITestCase): p.active = False p.save() - response = self.delete(reverse('api-part-detail', kwargs={'pk': 1})) - self.assertEqual(response.status_code, 204) + InvenTreeSetting.set_setting('PART_ALLOW_DELETE_FROM_ASSEMBLY', True) + + self.delete(reverse('api-part-detail', kwargs={'pk': 1})) with self.assertRaises(Part.DoesNotExist): p.refresh_from_db() diff --git a/src/backend/InvenTree/part/test_bom_item.py b/src/backend/InvenTree/part/test_bom_item.py index 7d5a8293ff..86d4578f4a 100644 --- a/src/backend/InvenTree/part/test_bom_item.py +++ b/src/backend/InvenTree/part/test_bom_item.py @@ -187,6 +187,8 @@ class BomItemTest(TestCase): self.assertEqual(bom_item.substitutes.count(), 4) for sub in subs: + sub.active = False + sub.save() sub.delete() # The substitution links should have been automatically removed diff --git a/src/backend/InvenTree/part/test_category.py b/src/backend/InvenTree/part/test_category.py index d3e89994ab..34308bf285 100644 --- a/src/backend/InvenTree/part/test_category.py +++ b/src/backend/InvenTree/part/test_category.py @@ -117,7 +117,7 @@ class CategoryTest(TestCase): child.pathstring, 'Cat/AAAAAAAAAA/BBBBBBBBBB/CCCCCCCCCC/DDDDDDDDDD/EEEEEEEEEE/FFFFFFFFFF/GGGGGGGGGG/HHHHHHHHHH/IIIIIIIIII/JJJJJJJJJJ/KKKKKKKKK...OO/PPPPPPPPPP/QQQQQQQQQQ/RRRRRRRRRR/SSSSSSSSSS/TTTTTTTTTT/UUUUUUUUUU/VVVVVVVVVV/WWWWWWWWWW/XXXXXXXXXX/YYYYYYYYYY/ZZZZZZZZZZ', ) - self.assertTrue(len(child.pathstring) <= 250) + self.assertLessEqual(len(child.pathstring), 250) # Attempt an invalid move with self.assertRaises(ValidationError): @@ -325,7 +325,7 @@ class CategoryTest(TestCase): self.assertEqual(descendants.count(), 3) for loc in [C11, C12, C13]: - self.assertTrue(loc in descendants) + self.assertIn(loc, descendants) # Check category C1x, should be B1 -> C1x for loc in [C11, C12, C13]: diff --git a/src/backend/InvenTree/part/test_part.py b/src/backend/InvenTree/part/test_part.py index 57f91af817..9c70ea23ca 100644 --- a/src/backend/InvenTree/part/test_part.py +++ b/src/backend/InvenTree/part/test_part.py @@ -336,6 +336,8 @@ class PartTest(TestCase): self.assertIn(self.r1, r2_relations) # Delete a part, ensure the relationship also gets deleted + self.r1.active = False + self.r1.save() self.r1.delete() self.assertEqual(PartRelated.objects.count(), countbefore) @@ -351,6 +353,8 @@ class PartTest(TestCase): self.assertEqual(len(self.r2.get_related_parts()), n) # Deleting r2 should remove *all* newly created relationships + self.r2.active = False + self.r2.save() self.r2.delete() self.assertEqual(PartRelated.objects.count(), countbefore) diff --git a/src/backend/InvenTree/part/test_pricing.py b/src/backend/InvenTree/part/test_pricing.py index ba4e7d54ef..2cdc4c54a6 100644 --- a/src/backend/InvenTree/part/test_pricing.py +++ b/src/backend/InvenTree/part/test_pricing.py @@ -5,14 +5,15 @@ from django.core.exceptions import ObjectDoesNotExist from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money +import common.currency import common.models import common.settings import company.models import order.models import part.models import stock.models -from InvenTree.status_codes import PurchaseOrderStatus from InvenTree.unit_test import InvenTreeTestCase +from order.status_codes import PurchaseOrderStatus class PartPricingTests(InvenTreeTestCase): @@ -179,7 +180,7 @@ class PartPricingTests(InvenTreeTestCase): self.assertIsNone(pricing.internal_cost_min) self.assertIsNone(pricing.internal_cost_max) - currency = common.settings.currency_code_default() + currency = common.currency.currency_code_default() for ii in range(5): # Let's add some internal price breaks diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index f14ab7e719..df1877bf56 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -155,6 +155,8 @@ class PluginDetail(RetrieveUpdateDestroyAPI): queryset = PluginConfig.objects.all() serializer_class = PluginSerializers.PluginConfigSerializer + lookup_field = 'key' + lookup_url_kwarg = 'plugin' def delete(self, request, *args, **kwargs): """Handle DELETE request for a PluginConfig instance. @@ -200,6 +202,8 @@ class PluginUninstall(UpdateAPI): queryset = PluginConfig.objects.all() serializer_class = PluginSerializers.PluginUninstallSerializer permission_classes = [IsSuperuser] + lookup_field = 'key' + lookup_url_kwarg = 'plugin' def perform_update(self, serializer): """Uninstall the plugin.""" @@ -219,6 +223,8 @@ class PluginActivate(UpdateAPI): queryset = PluginConfig.objects.all() serializer_class = PluginSerializers.PluginActivateSerializer permission_classes = [IsSuperuser] + lookup_field = 'key' + lookup_url_kwarg = 'plugin' def get_object(self): """Returns the object for the view.""" @@ -320,10 +326,10 @@ class PluginAllSettingList(APIView): @extend_schema( responses={200: PluginSerializers.PluginSettingSerializer(many=True)} ) - def get(self, request, pk): + def get(self, request, plugin): """Get all settings for a plugin config.""" # look up the plugin - plugin = check_plugin(None, pk) + plugin = check_plugin(plugin, None) settings = getattr(plugin, 'settings', {}) @@ -352,21 +358,21 @@ class PluginSettingDetail(RetrieveUpdateAPI): The URL provides the 'slug' of the plugin, and the 'key' of the setting. Both the 'slug' and 'key' must be valid, else a 404 error is raised """ - key = self.kwargs['key'] + setting_key = self.kwargs['key'] # Look up plugin - plugin = check_plugin( - plugin_slug=self.kwargs.get('plugin'), plugin_pk=self.kwargs.get('pk') - ) + plugin = check_plugin(self.kwargs.get('plugin', None), None) settings = getattr(plugin, 'settings', {}) - if key not in settings: + if setting_key not in settings: raise NotFound( - detail=f"Plugin '{plugin.slug}' has no setting matching '{key}'" + detail=f"Plugin '{plugin.slug}' has no setting matching '{setting_key}'" ) - return PluginSetting.get_setting_object(key, plugin=plugin.plugin_config()) + return PluginSetting.get_setting_object( + setting_key, plugin=plugin.plugin_config() + ) # Staff permission required permission_classes = [GlobalSettingsPermissions] @@ -384,7 +390,7 @@ class RegistryStatusView(APIView): @extend_schema(responses={200: PluginSerializers.PluginRegistryStatusSerializer()}) def get(self, request): - """Show registry status information.""" + """Show plugin registry status information.""" error_list = [] for stage, errors in registry.errors.items(): @@ -397,7 +403,8 @@ class RegistryStatusView(APIView): }) result = PluginSerializers.PluginRegistryStatusSerializer({ - 'registry_errors': error_list + 'registry_errors': error_list, + 'active_plugins': PluginConfig.objects.filter(active=True).count(), }).data return Response(result) @@ -410,23 +417,26 @@ plugin_api_urls = [ path( 'plugins/', include([ - # Plugin settings URLs + # Plugin management + path('reload/', PluginReload.as_view(), name='api-plugin-reload'), + path('install/', PluginInstall.as_view(), name='api-plugin-install'), + # Registry status + path( + 'status/', + RegistryStatusView.as_view(), + name='api-plugin-registry-status', + ), path( 'settings/', include([ - re_path( - r'^(?P[-\w]+)/(?P\w+)/', - PluginSettingDetail.as_view(), - name='api-plugin-setting-detail', - ), # Used for admin interface path( '', PluginSettingList.as_view(), name='api-plugin-setting-list' - ), + ) ]), ), - # Detail views for a single PluginConfig item + # Lookup for individual plugins (based on 'key', not 'pk') path( - '/', + '/', include([ path( 'settings/', @@ -434,7 +444,7 @@ plugin_api_urls = [ re_path( r'^(?P\w+)/', PluginSettingDetail.as_view(), - name='api-plugin-setting-detail-pk', + name='api-plugin-setting-detail', ), path( '', @@ -443,6 +453,12 @@ plugin_api_urls = [ ), ]), ), + path( + 'metadata/', + MetadataView.as_view(), + {'model': PluginConfig, 'lookup_field': 'key'}, + name='api-plugin-metadata', + ), path( 'activate/', PluginActivate.as_view(), @@ -456,23 +472,6 @@ plugin_api_urls = [ path('', PluginDetail.as_view(), name='api-plugin-detail'), ]), ), - # Metadata - path( - 'metadata/', - MetadataView.as_view(), - {'model': PluginConfig}, - name='api-plugin-metadata', - ), - # Plugin management - path('reload/', PluginReload.as_view(), name='api-plugin-reload'), - path('install/', PluginInstall.as_view(), name='api-plugin-install'), - # Registry status - path( - 'status/', - RegistryStatusView.as_view(), - name='api-plugin-registry-status', - ), - # Anything else path('', PluginList.as_view(), name='api-plugin-list'), ]), ), diff --git a/src/backend/InvenTree/plugin/base/barcodes/serializers.py b/src/backend/InvenTree/plugin/base/barcodes/serializers.py index b614bf1a0b..6ad15713b7 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/serializers.py +++ b/src/backend/InvenTree/plugin/base/barcodes/serializers.py @@ -7,7 +7,7 @@ from rest_framework import serializers import order.models import stock.models -from InvenTree.status_codes import PurchaseOrderStatus, SalesOrderStatus +from order.status_codes import PurchaseOrderStatus, SalesOrderStatus from plugin.builtin.barcodes.inventree_barcode import InvenTreeInternalBarcodePlugin diff --git a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py index f698590884..408c28d35f 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py +++ b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py @@ -27,25 +27,19 @@ class BarcodeAPITest(InvenTreeAPITestCase): def postBarcode(self, url, barcode, expected_code=None): """Post barcode and return results.""" return self.post( - url, - format='json', - data={'barcode': str(barcode)}, - expected_code=expected_code, + url, data={'barcode': str(barcode)}, expected_code=expected_code ) def test_invalid(self): """Test that invalid requests fail.""" # test scan url - self.post(self.scan_url, format='json', data={}, expected_code=400) + self.post(self.scan_url, data={}, expected_code=400) # test wrong assign urls - self.post(self.assign_url, format='json', data={}, expected_code=400) - self.post( - self.assign_url, format='json', data={'barcode': '123'}, expected_code=400 - ) + self.post(self.assign_url, data={}, expected_code=400) + self.post(self.assign_url, data={'barcode': '123'}, expected_code=400) self.post( self.assign_url, - format='json', data={'barcode': '123', 'stockitem': '123'}, expected_code=400, ) @@ -163,7 +157,6 @@ class BarcodeAPITest(InvenTreeAPITestCase): response = self.post( self.assign_url, - format='json', data={'barcode': barcode_data, 'stockitem': item.pk}, expected_code=200, ) @@ -183,7 +176,6 @@ class BarcodeAPITest(InvenTreeAPITestCase): # Ensure that the same barcode hash cannot be assigned to a different stock item! response = self.post( self.assign_url, - format='json', data={'barcode': barcode_data, 'stockitem': 521}, expected_code=400, ) diff --git a/src/backend/InvenTree/plugin/base/event/events.py b/src/backend/InvenTree/plugin/base/event/events.py index eaaa1bfd96..33a43b75f9 100644 --- a/src/backend/InvenTree/plugin/base/event/events.py +++ b/src/backend/InvenTree/plugin/base/event/events.py @@ -23,10 +23,6 @@ def trigger_event(event, *args, **kwargs): """ from common.models import InvenTreeSetting - if not settings.PLUGINS_ENABLED: - # Do nothing if plugins are not enabled - return # pragma: no cover - if not InvenTreeSetting.get_setting('ENABLE_PLUGINS_EVENTS', False): # Do nothing if plugin events are not enabled return @@ -60,6 +56,9 @@ def register_event(event, *args, **kwargs): # Determine if there are any plugins which are interested in responding if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting('ENABLE_PLUGINS_EVENTS'): + # Check if the plugin registry needs to be reloaded + registry.check_reload() + with transaction.atomic(): for slug, plugin in registry.plugins.items(): if not plugin.mixin_enabled('events'): diff --git a/src/backend/InvenTree/plugin/base/integration/PanelMixin.py b/src/backend/InvenTree/plugin/base/integration/PanelMixin.py new file mode 100644 index 0000000000..d4d374e67b --- /dev/null +++ b/src/backend/InvenTree/plugin/base/integration/PanelMixin.py @@ -0,0 +1,149 @@ +"""PanelMixin plugin class definition. + +Allows integration of custom 'panels' into the user interface. +""" + +import logging + +from InvenTree.helpers import generateTestKey +from plugin.helpers import MixinNotImplementedError, render_template, render_text + +logger = logging.getLogger('inventree') + + +class PanelMixin: + """Mixin which allows integration of custom 'panels' into a particular page. + + The mixin provides a number of key functionalities: + + - Adds an (initially hidden) panel to the page + - Allows rendering of custom templated content to the panel + - Adds a menu item to the 'navbar' on the left side of the screen + - Allows custom javascript to be run when the panel is initially loaded + + The PanelMixin class allows multiple panels to be returned for any page, + and also allows the plugin to return panels for many different pages. + + Any class implementing this mixin must provide the 'get_custom_panels' method, + which dynamically returns the custom panels for a particular page. + + This method is provided with: + + - view : The View object which is being rendered + - request : The HTTPRequest object + + Note that as this is called dynamically (per request), + then the actual panels returned can vary depending on the particular request or page + + The 'get_custom_panels' method must return a list of dict objects, each with the following keys: + + - title : The title of the panel, to appear in the sidebar menu + - description : Extra descriptive text (optional) + - icon : The icon to appear in the sidebar menu + - content : The HTML content to appear in the panel, OR + - content_template : A template file which will be rendered to produce the panel content + - javascript : The javascript content to be rendered when the panel is loaded, OR + - javascript_template : A template file which will be rendered to produce javascript + + e.g. + + { + 'title': "Updates", + 'description': "Latest updates for this part", + 'javascript': 'alert("You just loaded this panel!")', + 'content': 'Hello world', + } + """ + + class MixinMeta: + """Meta for mixin.""" + + MIXIN_NAME = 'Panel' + + def __init__(self): + """Register mixin.""" + super().__init__() + self.add_mixin('panel', True, __class__) + + def get_custom_panels(self, view, request): + """This method *must* be implemented by the plugin class.""" + raise MixinNotImplementedError( + f"{__class__} is missing the 'get_custom_panels' method" + ) + + def get_panel_context(self, view, request, context): + """Build the context data to be used for template rendering. + + Custom class can override this to provide any custom context data. + + (See the example in "custom_panel_sample.py") + """ + # Provide some standard context items to the template for rendering + context['plugin'] = self + context['request'] = request + context['user'] = getattr(request, 'user', None) + context['view'] = view + + try: + context['object'] = view.get_object() + except AttributeError: # pragma: no cover + pass + + return context + + def render_panels(self, view, request, context): + """Get panels for a view. + + Args: + view: Current view context + request: Current request for passthrough + context: Rendering context + + Returns: + Array of panels + """ + panels = [] + + # Construct an updated context object for template rendering + ctx = self.get_panel_context(view, request, context) + + custom_panels = self.get_custom_panels(view, request) or [] + + for panel in custom_panels: + content_template = panel.get('content_template', None) + javascript_template = panel.get('javascript_template', None) + + if content_template: + # Render content template to HTML + panel['content'] = render_template(self, content_template, ctx) + else: + # Render content string to HTML + panel['content'] = render_text(panel.get('content', ''), ctx) + + if javascript_template: + # Render javascript template to HTML + panel['javascript'] = render_template(self, javascript_template, ctx) + else: + # Render javascript string to HTML + panel['javascript'] = render_text(panel.get('javascript', ''), ctx) + + # Check for required keys + required_keys = ['title', 'content'] + + if any(key not in panel for key in required_keys): + logger.warning( + 'Custom panel for plugin %s is missing a required parameter', + __class__, + ) + continue + + # Add some information on this plugin + panel['plugin'] = self + panel['slug'] = self.slug + + # Add a 'key' for the panel, which is mostly guaranteed to be unique + panel['key'] = generateTestKey(self.slug + panel.get('title', 'panel')) + + panels.append(panel) + + return panels diff --git a/src/backend/InvenTree/plugin/base/integration/ReportMixin.py b/src/backend/InvenTree/plugin/base/integration/ReportMixin.py index 1dd2a7ae2f..1c81df722f 100644 --- a/src/backend/InvenTree/plugin/base/integration/ReportMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ReportMixin.py @@ -47,3 +47,16 @@ class ReportMixin: context: The context dictionary to add to """ pass + + def report_callback(self, template, instance, report, request): + """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 + + The default implementation does nothing. + """ + pass diff --git a/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py b/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py index a6cad702f7..e12cc2a25d 100644 --- a/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ScheduleMixin.py @@ -58,10 +58,10 @@ class ScheduleMixin: @classmethod def _activate_mixin(cls, registry, plugins, *args, **kwargs): """Activate schedules from plugins with the ScheduleMixin.""" - logger.debug('Activating plugin tasks') - from common.models import InvenTreeSetting + logger.debug('Activating plugin tasks') + # List of tasks we have activated task_keys = [] diff --git a/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py b/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py index 285069b9f2..d00c6753f6 100644 --- a/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ValidationMixin.py @@ -1,6 +1,7 @@ """Validation mixin class definition.""" from django.core.exceptions import ValidationError +from django.db.models import Model import part.models import stock.models @@ -49,7 +50,24 @@ class ValidationMixin: """Raise a ValidationError with the given message.""" raise ValidationError(message) - def validate_model_instance(self, instance, deltas=None): + def validate_model_deletion(self, instance: Model) -> None: + """Run custom validation when a model instance is being deleted. + + This method is called when a model instance is being deleted. + It allows the plugin to raise a ValidationError if the instance cannot be deleted. + + Arguments: + instance: The model instance to validate + + Returns: + None: or True (refer to class docstring) + + Raises: + ValidationError: if the instance cannot be deleted + """ + return None + + def validate_model_instance(self, instance: Model, deltas: dict = None) -> None: """Run custom validation on a database model instance. This method is called when a model instance is being validated. @@ -60,10 +78,10 @@ class ValidationMixin: deltas: A dictionary of field names and updated values (if the instance is being updated) Returns: - None or True (refer to class docstring) + None: or True (refer to class docstring) Raises: - ValidationError if the instance is invalid + ValidationError: if the instance is invalid """ return None @@ -112,9 +130,14 @@ class ValidationMixin: """ return None - def generate_batch_code(self): + def generate_batch_code(self, **kwargs): """Generate a new batch code. + This method is called when a new batch code is required. + + kwargs: + Any additional keyword arguments which are passed through to the plugin, based on the context of the caller + Returns: A new batch code (string) or None """ diff --git a/src/backend/InvenTree/plugin/base/integration/mixins.py b/src/backend/InvenTree/plugin/base/integration/mixins.py index 0421472483..5644dc8f8e 100644 --- a/src/backend/InvenTree/plugin/base/integration/mixins.py +++ b/src/backend/InvenTree/plugin/base/integration/mixins.py @@ -2,8 +2,7 @@ import logging -from InvenTree.helpers import generateTestKey -from plugin.helpers import MixinNotImplementedError, render_template, render_text +from plugin.helpers import MixinNotImplementedError logger = logging.getLogger('inventree') @@ -54,144 +53,6 @@ class NavigationMixin: return getattr(self, 'NAVIGATION_TAB_ICON', 'fas fa-question') -class PanelMixin: - """Mixin which allows integration of custom 'panels' into a particular page. - - The mixin provides a number of key functionalities: - - - Adds an (initially hidden) panel to the page - - Allows rendering of custom templated content to the panel - - Adds a menu item to the 'navbar' on the left side of the screen - - Allows custom javascript to be run when the panel is initially loaded - - The PanelMixin class allows multiple panels to be returned for any page, - and also allows the plugin to return panels for many different pages. - - Any class implementing this mixin must provide the 'get_custom_panels' method, - which dynamically returns the custom panels for a particular page. - - This method is provided with: - - - view : The View object which is being rendered - - request : The HTTPRequest object - - Note that as this is called dynamically (per request), - then the actual panels returned can vary depending on the particular request or page - - The 'get_custom_panels' method must return a list of dict objects, each with the following keys: - - - title : The title of the panel, to appear in the sidebar menu - - description : Extra descriptive text (optional) - - icon : The icon to appear in the sidebar menu - - content : The HTML content to appear in the panel, OR - - content_template : A template file which will be rendered to produce the panel content - - javascript : The javascript content to be rendered when the panel is loaded, OR - - javascript_template : A template file which will be rendered to produce javascript - - e.g. - - { - 'title': "Updates", - 'description': "Latest updates for this part", - 'javascript': 'alert("You just loaded this panel!")', - 'content': 'Hello world', - } - """ - - class MixinMeta: - """Meta for mixin.""" - - MIXIN_NAME = 'Panel' - - def __init__(self): - """Register mixin.""" - super().__init__() - self.add_mixin('panel', True, __class__) - - def get_custom_panels(self, view, request): - """This method *must* be implemented by the plugin class.""" - raise MixinNotImplementedError( - f"{__class__} is missing the 'get_custom_panels' method" - ) - - def get_panel_context(self, view, request, context): - """Build the context data to be used for template rendering. - - Custom class can override this to provide any custom context data. - - (See the example in "custom_panel_sample.py") - """ - # Provide some standard context items to the template for rendering - context['plugin'] = self - context['request'] = request - context['user'] = getattr(request, 'user', None) - context['view'] = view - - try: - context['object'] = view.get_object() - except AttributeError: # pragma: no cover - pass - - return context - - def render_panels(self, view, request, context): - """Get panels for a view. - - Args: - view: Current view context - request: Current request for passthrough - context: Rendering context - - Returns: - Array of panels - """ - panels = [] - - # Construct an updated context object for template rendering - ctx = self.get_panel_context(view, request, context) - - custom_panels = self.get_custom_panels(view, request) or [] - - for panel in custom_panels: - content_template = panel.get('content_template', None) - javascript_template = panel.get('javascript_template', None) - - if content_template: - # Render content template to HTML - panel['content'] = render_template(self, content_template, ctx) - else: - # Render content string to HTML - panel['content'] = render_text(panel.get('content', ''), ctx) - - if javascript_template: - # Render javascript template to HTML - panel['javascript'] = render_template(self, javascript_template, ctx) - else: - # Render javascript string to HTML - panel['javascript'] = render_text(panel.get('javascript', ''), ctx) - - # Check for required keys - required_keys = ['title', 'content'] - - if any(key not in panel for key in required_keys): - logger.warning( - 'Custom panel for plugin %s is missing a required parameter', - __class__, - ) - continue - - # Add some information on this plugin - panel['plugin'] = self - panel['slug'] = self.slug - - # Add a 'key' for the panel, which is mostly guaranteed to be unique - panel['key'] = generateTestKey(self.slug + panel.get('title', 'panel')) - - panels.append(panel) - - return panels - - class SettingsContentMixin: """Mixin which allows integration of custom HTML content into a plugins settings page. diff --git a/src/backend/InvenTree/plugin/base/integration/test_mixins.py b/src/backend/InvenTree/plugin/base/integration/test_mixins.py index 0cba7f5854..43bd7b9d1f 100644 --- a/src/backend/InvenTree/plugin/base/integration/test_mixins.py +++ b/src/backend/InvenTree/plugin/base/integration/test_mixins.py @@ -10,7 +10,7 @@ from error_report.models import Error from InvenTree.unit_test import InvenTreeTestCase from plugin import InvenTreePlugin -from plugin.base.integration.mixins import PanelMixin +from plugin.base.integration.PanelMixin import PanelMixin from plugin.helpers import MixinNotImplementedError from plugin.mixins import ( APICallMixin, @@ -351,7 +351,7 @@ class PanelMixinTests(InvenTreeTestCase): """Test that the sample panel plugin is installed.""" plugins = registry.with_mixin('panel') - self.assertTrue(len(plugins) == 0) + self.assertEqual(len(plugins), 0) # Now enable the plugin registry.set_plugin_state('samplepanel', True) diff --git a/src/backend/InvenTree/plugin/base/label/mixins.py b/src/backend/InvenTree/plugin/base/label/mixins.py index 736d431d00..a60c1b0d71 100644 --- a/src/backend/InvenTree/plugin/base/label/mixins.py +++ b/src/backend/InvenTree/plugin/base/label/mixins.py @@ -11,17 +11,12 @@ import pdf2image from rest_framework import serializers from rest_framework.request import Request -from build.models import BuildLine from common.models import InvenTreeSetting from InvenTree.exceptions import log_error from InvenTree.tasks import offload_task -from label.models import LabelTemplate -from part.models import Part from plugin.base.label import label as plugin_label from plugin.helpers import MixinNotImplementedError -from stock.models import StockItem, StockLocation - -LabelItemType = Union[StockItem, StockLocation, Part, BuildLine] +from report.models import LabelTemplate, TemplateOutput class LabelPrintingMixin: @@ -34,11 +29,6 @@ class LabelPrintingMixin: Note that the print_labels() function can also be overridden to provide custom behavior. """ - # If True, the print_label() method will block until the label is printed - # If False, the offload_label() method will be called instead - # By default, this is False, which means that labels will be printed in the background - BLOCKING_PRINT = False - class MixinMeta: """Meta options for this mixin.""" @@ -49,37 +39,42 @@ class LabelPrintingMixin: super().__init__() self.add_mixin('labels', True, __class__) - def render_to_pdf(self, label: LabelTemplate, request, **kwargs): + BLOCKING_PRINT = True + + def render_to_pdf(self, label: LabelTemplate, instance, request, **kwargs): """Render this label to PDF format. Arguments: - label: The LabelTemplate object to render + label: The LabelTemplate object to render against + instance: The model instance to render request: The HTTP request object which triggered this print job """ try: - return label.render(request) + return label.render(instance, request) except Exception: log_error('label.render_to_pdf') raise ValidationError(_('Error rendering label to PDF')) - def render_to_html(self, label: LabelTemplate, request, **kwargs): + def render_to_html(self, label: LabelTemplate, instance, request, **kwargs): """Render this label to HTML format. Arguments: - label: The LabelTemplate object to render + label: The LabelTemplate object to render against + instance: The model instance to render request: The HTTP request object which triggered this print job """ try: - return label.render_as_string(request) + return label.render_as_string(instance, request) except Exception: log_error('label.render_to_html') raise ValidationError(_('Error rendering label to HTML')) - def render_to_png(self, label: LabelTemplate, request=None, **kwargs): + def render_to_png(self, label: LabelTemplate, instance, request=None, **kwargs): """Render this label to PNG format. Arguments: - label: The LabelTemplate object to render + label: The LabelTemplate object to render against + item: The model instance to render request: The HTTP request object which triggered this print job Keyword Arguments: pdf_data: The raw PDF data of the rendered label (if already rendered) @@ -94,7 +89,9 @@ class LabelPrintingMixin: if not pdf_data: pdf_data = ( - self.render_to_pdf(label, request, **kwargs).get_document().write_pdf() + self.render_to_pdf(label, instance, request, **kwargs) + .get_document() + .write_pdf() ) pdf2image_kwargs = { @@ -108,19 +105,21 @@ class LabelPrintingMixin: return pdf2image.convert_from_bytes(pdf_data, **pdf2image_kwargs)[0] except Exception: log_error('label.render_to_png') - raise ValidationError(_('Error rendering label to PNG')) + return None def print_labels( self, label: LabelTemplate, - items: QuerySet[LabelItemType], + output: TemplateOutput, + items: list, request: Request, **kwargs, - ): + ) -> None: """Print one or more labels with the provided template and items. Arguments: label: The LabelTemplate object to use for printing + output: The TemplateOutput object used to store the results items: The list of database items to print (e.g. StockItem instances) request: The HTTP request object which triggered this print job @@ -128,7 +127,10 @@ class LabelPrintingMixin: printing_options: The printing options set for this print job defined in the PrintingOptionsSerializer Returns: - A JSONResponse object which indicates outcome to the user + None. Output data should be stored in the provided TemplateOutput object + + Raises: + ValidationError if there is an error during the print process 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. @@ -138,19 +140,33 @@ class LabelPrintingMixin: except AttributeError: user = None + # Initial state for the output print job + output.progress = 0 + output.complete = False + output.save() + + N = len(items) + + if N <= 0: + raise ValidationError(_('No items provided to print')) + # Generate a label output for each provided item for item in items: - label.object_to_print = item - filename = label.generate_filename(request) - pdf_file = self.render_to_pdf(label, request, **kwargs) + context = label.get_context(item, request) + filename = label.generate_filename(context) + pdf_file = self.render_to_pdf(label, item, request, **kwargs) pdf_data = pdf_file.get_document().write_pdf() - png_file = self.render_to_png(label, request, pdf_data=pdf_data, **kwargs) + png_file = self.render_to_png( + label, item, request, pdf_data=pdf_data, **kwargs + ) print_args = { 'pdf_file': pdf_file, 'pdf_data': pdf_data, 'png_file': png_file, 'filename': filename, + 'context': context, + 'output': output, 'label_instance': label, 'item_instance': item, 'user': user, @@ -160,19 +176,38 @@ class LabelPrintingMixin: } if self.BLOCKING_PRINT: - # Blocking print job + # Print the label (blocking) self.print_label(**print_args) else: - # Non-blocking print job + # Offload the print task to the background worker - # Offload the print job to a background worker - self.offload_label(**print_args) + # Exclude the 'pdf_file' object - cannot be pickled + print_args.pop('pdf_file', None) - # Return a JSON response to the user - return JsonResponse({ - 'success': True, - 'message': f'{len(items)} labels printed', - }) + # Exclude the 'context' object - cannot be pickled + print_args.pop('context', None) + + offload_task(plugin_label.print_label, self.plugin_slug(), **print_args) + + # Update the progress of the print job + output.progress += int(100 / N) + output.save() + + # Mark the output as complete + output.complete = True + output.progress = 100 + + # Add in the generated file (if applicable) + output.output = self.get_generated_file(**print_args) + + output.save() + + def get_generated_file(self, **kwargs): + """Return the generated file for download (or None, if this plugin does not generate a file output). + + The default implementation returns None, but this can be overridden by the particular plugin. + """ + return None def print_label(self, **kwargs): """Print a single label (blocking). @@ -183,6 +218,7 @@ class LabelPrintingMixin: filename: The filename of this PDF label label_instance: The instance of the label model which triggered the print_label() method item_instance: The instance of the database model against which the label is printed + output: The TemplateOutput object used to store the results of the print job user: The user who triggered this print job width: The expected width of the label (in mm) height: The expected height of the label (in mm) @@ -195,19 +231,6 @@ class LabelPrintingMixin: 'This Plugin must implement a `print_label` method' ) - def offload_label(self, **kwargs): - """Offload a single label (non-blocking). - - Instead of immediately printing the label (which is a blocking process), - this method should offload the label to a background worker process. - - Offloads a call to the 'print_label' method (of this plugin) to a background worker. - """ - # Exclude the 'pdf_file' object - cannot be pickled - kwargs.pop('pdf_file', None) - - offload_task(plugin_label.print_label, self.plugin_slug(), **kwargs) - def get_printing_options_serializer( self, request: Request, *args, **kwargs ) -> Union[serializers.Serializer, None]: @@ -227,3 +250,11 @@ class LabelPrintingMixin: return None return serializer(*args, **kwargs) + + def before_printing(self): + """Hook method called before printing labels.""" + pass + + def after_printing(self): + """Hook method called after printing labels.""" + pass diff --git a/src/backend/InvenTree/plugin/base/label/test_label_mixin.py b/src/backend/InvenTree/plugin/base/label/test_label_mixin.py index 29b986af0c..5845163e63 100644 --- a/src/backend/InvenTree/plugin/base/label/test_label_mixin.py +++ b/src/backend/InvenTree/plugin/base/label/test_label_mixin.py @@ -12,62 +12,28 @@ from PIL import Image from InvenTree.settings import BASE_DIR from InvenTree.unit_test import InvenTreeAPITestCase -from label.models import PartLabel, StockItemLabel, StockLocationLabel from part.models import Part from plugin.base.label.mixins import LabelPrintingMixin from plugin.helpers import MixinNotImplementedError from plugin.plugin import InvenTreePlugin from plugin.registry import registry +from report.models import LabelTemplate +from report.tests import PrintTestMixins from stock.models import StockItem, StockLocation -class LabelMixinTests(InvenTreeAPITestCase): +class LabelMixinTests(PrintTestMixins, InvenTreeAPITestCase): """Test that the Label mixin operates correctly.""" fixtures = ['category', 'part', 'location', 'stock'] roles = 'all' + plugin_ref = 'samplelabelprinter' - def do_activate_plugin(self): - """Activate the 'samplelabel' plugin.""" - config = registry.get_plugin('samplelabelprinter').plugin_config() - config.active = True - config.save() - - def do_url( - self, - parts, - plugin_ref, - label, - url_name: str = 'api-part-label-print', - url_single: str = 'part', - invalid: bool = False, - ): - """Generate an URL to print a label.""" - # Construct URL - kwargs = {} - if label: - kwargs['pk'] = label.pk - - url = reverse(url_name, kwargs=kwargs) - - # Append part filters - if not parts: - pass - elif len(parts) == 1: - url += f'?{url_single}={parts[0].pk}' - elif len(parts) > 1: - url += '?' + '&'.join([f'{url_single}s={item.pk}' for item in parts]) - - # Append an invalid item - if invalid: - url += f'&{url_single}{"s" if len(parts) > 1 else ""}=abc' - - # Append plugin reference - if plugin_ref: - url += f'&plugin={plugin_ref}' - - return url + @property + def printing_url(self): + """Return the label printing URL.""" + return reverse('api-label-print') def test_wrong_implementation(self): """Test that a wrong implementation raises an error.""" @@ -121,52 +87,106 @@ class LabelMixinTests(InvenTreeAPITestCase): def test_printing_process(self): """Test that a label can be printed.""" # Ensure the labels were created - apps.get_app_config('label').create_defaults() + apps.get_app_config('report').create_default_labels() + apps.get_app_config('report').create_default_reports() + + test_path = BASE_DIR / '_testfolder' / 'label' - # Lookup references - part = Part.objects.first() parts = Part.objects.all()[:2] - plugin_ref = 'samplelabelprinter' - label = PartLabel.objects.first() - url = self.do_url([part], plugin_ref, label) + template = LabelTemplate.objects.filter(enabled=True, model_type='part').first() - # Non-existing plugin - response = self.get(f'{url}123', expected_code=404) - self.assertIn( - f"Plugin '{plugin_ref}123' not found", str(response.content, 'utf8') + self.assertIsNotNone(template) + self.assertTrue(template.enabled) + + url = self.printing_url + + # Template does not exist + response = self.post( + url, {'template': 9999, 'plugin': 9999, 'items': []}, expected_code=400 ) - # Inactive plugin - response = self.get(url, expected_code=400) - self.assertIn( - f"Plugin '{plugin_ref}' is not enabled", str(response.content, 'utf8') + self.assertIn('object does not exist', str(response.data['template'])) + self.assertIn('list may not be empty', str(response.data['items'])) + + # Plugin is not a label plugin + no_valid_plg = registry.get_plugin('digikeyplugin').plugin_config() + + response = self.post( + url, + {'template': template.pk, 'plugin': no_valid_plg.key, 'items': [1, 2, 3]}, + expected_code=400, ) + self.assertIn('Plugin does not support label printing', str(response.data)) + + # Find available plugins + plugins = registry.with_mixin('labels') + self.assertGreater(len(plugins), 0) + + plugin = registry.get_plugin('samplelabelprinter') + config = plugin.plugin_config() + + # Ensure that the plugin is not active + registry.set_plugin_state(plugin.slug, False) + + # Plugin is not active - should return error + response = self.post( + url, + {'template': template.pk, 'plugin': config.key, 'items': [1, 2, 3]}, + expected_code=400, + ) + self.assertIn('Plugin is not active', str(response.data['plugin'])) + # Active plugin self.do_activate_plugin() # Print one part - self.get(url, expected_code=200) + response = self.post( + url, + {'template': template.pk, 'plugin': config.key, 'items': [parts[0].pk]}, + expected_code=201, + ) + + self.assertEqual(response.data['plugin'], 'samplelabelprinter') + self.assertIsNone(response.data['output']) # Print multiple parts - self.get(self.do_url(parts, plugin_ref, label), expected_code=200) + response = self.post( + url, + { + 'template': template.pk, + 'plugin': config.key, + 'items': [item.pk for item in parts], + }, + expected_code=201, + ) + + self.assertEqual(response.data['plugin'], 'samplelabelprinter') + self.assertIsNone(response.data['output']) # Print multiple parts without a plugin - self.get(self.do_url(parts, None, label), expected_code=200) + response = self.post( + url, + {'template': template.pk, 'items': [item.pk for item in parts]}, + expected_code=201, + ) - # Print multiple parts without a plugin in debug mode - response = self.get(self.do_url(parts, None, label), expected_code=200) + self.assertEqual(response.data['plugin'], 'inventreelabel') + self.assertIsNotNone(response.data['output']) data = json.loads(response.content) - self.assertIn('file', data) + self.assertIn('output', data) # Print no part - self.get(self.do_url(None, plugin_ref, label), expected_code=400) + self.post( + url, + {'template': template.pk, 'plugin': plugin.pk, 'items': None}, + expected_code=400, + ) # Test that the labels have been printed # The sample labelling plugin simply prints to file - test_path = BASE_DIR / '_testfolder' / 'label' self.assertTrue(os.path.exists(f'{test_path}.pdf')) # Read the raw .pdf data - ensure it contains some sensible information @@ -183,37 +203,45 @@ class LabelMixinTests(InvenTreeAPITestCase): def test_printing_options(self): """Test printing options.""" # Ensure the labels were created - apps.get_app_config('label').create_defaults() + apps.get_app_config('report').create_default_labels() # Lookup references parts = Part.objects.all()[:2] - plugin_ref = 'samplelabelprinter' - label = PartLabel.objects.first() - + template = LabelTemplate.objects.filter(enabled=True, model_type='part').first() self.do_activate_plugin() + plugin = registry.get_plugin(self.plugin_ref) # test options response options = self.options( - self.do_url(parts, plugin_ref, label), expected_code=200 + self.printing_url, data={'plugin': plugin.slug}, expected_code=200 ).json() - self.assertTrue('amount' in options['actions']['POST']) + self.assertIn('amount', options['actions']['POST']) - plg = registry.get_plugin(plugin_ref) - with mock.patch.object(plg, 'print_label') as print_label: + with mock.patch.object(plugin, 'print_label') as print_label: # wrong value type res = self.post( - self.do_url(parts, plugin_ref, label), - data={'amount': '-no-valid-int-'}, + self.printing_url, + { + 'plugin': plugin.slug, + 'template': template.pk, + 'items': [a.pk for a in parts], + 'amount': '-no-valid-int-', + }, expected_code=400, ).json() - self.assertTrue('amount' in res) + self.assertIn('amount', res) print_label.assert_not_called() # correct value type self.post( - self.do_url(parts, plugin_ref, label), - data={'amount': 13}, - expected_code=200, + self.printing_url, + { + 'template': template.pk, + 'plugin': plugin.slug, + 'items': [a.pk for a in parts], + 'amount': 13, + }, + expected_code=201, ).json() self.assertEqual( print_label.call_args.kwargs['printing_options'], {'amount': 13} @@ -221,57 +249,15 @@ class LabelMixinTests(InvenTreeAPITestCase): def test_printing_endpoints(self): """Cover the endpoints not covered by `test_printing_process`.""" - plugin_ref = 'samplelabelprinter' - # Activate the label components - apps.get_app_config('label').create_defaults() + apps.get_app_config('report').create_default_labels() self.do_activate_plugin() - def run_print_test(label, qs, url_name, url_single): - """Run tests on single and multiple page printing. + # Test StockItemLabel + self.run_print_test(StockItem, 'stockitem') - Args: - label: class of the label - qs: class of the base queryset - url_name: url for endpoints - url_single: item lookup reference - """ - label = label.objects.first() - qs = qs.objects.all() + # Test StockLocationLabel + self.run_print_test(StockLocation, 'stocklocation') - # List endpoint - self.get( - self.do_url(None, None, None, f'{url_name}-list', url_single), - expected_code=200, - ) - - # List endpoint with filter - self.get( - self.do_url( - qs[:2], None, None, f'{url_name}-list', url_single, invalid=True - ), - expected_code=200, - ) - - # Single page printing - self.get( - self.do_url(qs[:1], plugin_ref, label, f'{url_name}-print', url_single), - expected_code=200, - ) - - # Multi page printing - self.get( - self.do_url(qs[:2], plugin_ref, label, f'{url_name}-print', url_single), - expected_code=200, - ) - - # Test StockItemLabels - run_print_test(StockItemLabel, StockItem, 'api-stockitem-label', 'item') - - # Test StockLocationLabels - run_print_test( - StockLocationLabel, StockLocation, 'api-stocklocation-label', 'location' - ) - - # Test PartLabels - run_print_test(PartLabel, Part, 'api-part-label', 'part') + # Test PartLabel + self.run_print_test(Part, 'part') diff --git a/src/backend/InvenTree/plugin/base/locate/test_locate.py b/src/backend/InvenTree/plugin/base/locate/test_locate.py index 4bc152d71c..e03070a411 100644 --- a/src/backend/InvenTree/plugin/base/locate/test_locate.py +++ b/src/backend/InvenTree/plugin/base/locate/test_locate.py @@ -26,9 +26,9 @@ class LocatePluginTests(InvenTreeAPITestCase): """Test that a locate plugin is actually installed.""" plugins = registry.with_mixin('locate') - self.assertTrue(len(plugins) > 0) + self.assertGreater(len(plugins), 0) - self.assertTrue('samplelocate' in [p.slug for p in plugins]) + self.assertIn('samplelocate', [p.slug for p in plugins]) def test_locate_fail(self): """Test various API failure modes.""" diff --git a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py index 4f5a4b405c..233d174d64 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py @@ -19,7 +19,6 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): def test_assert_error(barcode_data): response = self.post( reverse('api-barcode-link'), - format='json', data={'barcode': barcode_data, 'stockitem': 521}, expected_code=400, ) diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py index ed2d6c70d9..07bb3c8ef1 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py @@ -1,10 +1,9 @@ """Default label printing plugin (supports PDF generation).""" from django.core.files.base import ContentFile -from django.http import JsonResponse from django.utils.translation import gettext_lazy as _ -from label.models import LabelOutput, LabelTemplate +from InvenTree.helpers import str2bool from plugin import InvenTreePlugin from plugin.mixins import LabelPrintingMixin, SettingsMixin @@ -19,7 +18,7 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): NAME = 'InvenTreeLabel' TITLE = _('InvenTree PDF label printer') DESCRIPTION = _('Provides native support for printing PDF labels') - VERSION = '1.0.0' + VERSION = '1.1.0' AUTHOR = _('InvenTree contributors') BLOCKING_PRINT = True @@ -33,58 +32,57 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): } } - def print_labels(self, label: LabelTemplate, items: list, request, **kwargs): - """Handle printing of multiple labels. + # Keep track of individual label outputs + # These will be stitched together at the end of printing + outputs = [] + debug = None - - Label outputs are concatenated together, and we return a single PDF file. - - If DEBUG mode is enabled, we return a single HTML file. - """ - debug = self.get_setting('DEBUG') + def before_printing(self): + """Reset the list of label outputs.""" + self.outputs = [] + self.debug = None - outputs = [] - output_file = None + def in_debug_mode(self): + """Check if the plugin is printing in debug mode.""" + if self.debug is None: + self.debug = str2bool(self.get_setting('DEBUG')) - for item in items: - label.object_to_print = item + return self.debug - outputs.append(self.print_label(label, request, debug=debug, **kwargs)) + def print_label(self, **kwargs): + """Print a single label.""" + label = kwargs['label_instance'] + instance = kwargs['item_instance'] - if self.get_setting('DEBUG'): - html = '\n'.join(outputs) - - output_file = ContentFile(html, 'labels.html') + if self.in_debug_mode(): + # In debug mode, return raw HTML output + output = self.render_to_html(label, instance, None, **kwargs) else: + # Output is already provided + output = kwargs['pdf_file'] + + self.outputs.append(output) + + def get_generated_file(self, **kwargs): + """Return the generated file, by stitching together the individual label outputs.""" + if len(self.outputs) == 0: + return None + + if self.in_debug_mode(): + # Simple HTML output + data = '\n'.join(self.outputs) + filename = 'labels.html' + else: + # Stitch together the PDF outputs pages = [] - # Following process is required to stitch labels together into a single PDF - for output in outputs: + for output in self.outputs: doc = output.get_document() for page in doc.pages: pages.append(page) - pdf = outputs[0].get_document().copy(pages).write_pdf() + data = self.outputs[0].get_document().copy(pages).write_pdf() + filename = kwargs.get('filename', 'labels.pdf') - # Create label output file - output_file = ContentFile(pdf, 'labels.pdf') - - # Save the generated file to the database - output = LabelOutput.objects.create(label=output_file, user=request.user) - - return JsonResponse({ - 'file': output.label.url, - 'success': True, - 'message': f'{len(items)} labels generated', - }) - - def print_label(self, label: LabelTemplate, request, **kwargs): - """Handle printing of a single label. - - Returns either a PDF or HTML output, depending on the DEBUG setting. - """ - debug = kwargs.get('debug', self.get_setting('DEBUG')) - - if debug: - return self.render_to_html(label, request, **kwargs) - - return self.render_to_pdf(label, request, **kwargs) + return ContentFile(data, name=filename) diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py index 1d5d8c6651..39af2e7cca 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py @@ -10,11 +10,11 @@ from rest_framework import serializers from common.models import InvenTreeUserSetting from InvenTree.serializers import DependentField from InvenTree.tasks import offload_task -from label.models import LabelTemplate from machine.machine_types import LabelPrinterBaseDriver, LabelPrinterMachine from plugin import InvenTreePlugin from plugin.machine import registry from plugin.mixins import LabelPrintingMixin +from report.models import LabelTemplate def get_machine_and_driver(machine_pk: str): @@ -63,7 +63,7 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, InvenTreePlugin): VERSION = '1.0.0' AUTHOR = _('InvenTree contributors') - def print_labels(self, label: LabelTemplate, items, request, **kwargs): + def print_labels(self, label: LabelTemplate, output, items, request, **kwargs): """Print labels implementation that calls the correct machine driver print_labels method.""" machine, driver = get_machine_and_driver( kwargs['printing_options'].get('machine', '') @@ -111,9 +111,10 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, InvenTreePlugin): """Custom __init__ method to dynamically override the machine choices based on the request.""" super().__init__(*args, **kwargs) - view = kwargs['context']['view'] - template = view.get_object() - items_to_print = view.get_items() + # TODO @matmair Re-enable this when the need is clear + # view = kwargs['context']['view'] + template = None # view.get_object() + items_to_print = None # view.get_items() # get all available printers for each driver machines: list[LabelPrinterMachine] = [] diff --git a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py index 5f6ca952e4..bf88e0f132 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py +++ b/src/backend/InvenTree/plugin/builtin/labels/label_sheet.py @@ -12,9 +12,9 @@ import weasyprint from rest_framework import serializers import report.helpers -from label.models import LabelOutput, LabelTemplate from plugin import InvenTreePlugin from plugin.mixins import LabelPrintingMixin, SettingsMixin +from report.models import LabelOutput, LabelTemplate logger = logging.getLogger('inventree') @@ -68,8 +68,13 @@ class InvenTreeLabelSheetPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlug PrintingOptionsSerializer = LabelPrintingOptionsSerializer - def print_labels(self, label: LabelTemplate, items: list, request, **kwargs): - """Handle printing of the provided labels.""" + def print_labels( + self, label: LabelTemplate, output: LabelOutput, items: list, request, **kwargs + ): + """Handle printing of the provided labels. + + Note that we override the entire print_labels method for this plugin. + """ printing_options = kwargs['printing_options'] # Extract page size for the label sheet @@ -134,15 +139,10 @@ class InvenTreeLabelSheetPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlug html = weasyprint.HTML(string=html_data) document = html.render().write_pdf() - output_file = ContentFile(document, 'labels.pdf') - - output = LabelOutput.objects.create(label=output_file, user=request.user) - - return JsonResponse({ - 'file': output.label.url, - 'success': True, - 'message': f'{len(items)} labels generated', - }) + output.output = ContentFile(document, 'labels.pdf') + output.progress = 100 + output.complete = True + output.save() def print_page(self, label: LabelTemplate, items: list, request, **kwargs): """Generate a single page of labels. @@ -185,7 +185,7 @@ class InvenTreeLabelSheetPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlug # Render the individual label template # Note that we disable @page styling for this cell = label.render_as_string( - request, target_object=items[idx], insert_page_style=False + items[idx], request, insert_page_style=False ) html += cell except Exception as exc: diff --git a/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py b/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py index 49bff6903e..dd9e8f50fb 100644 --- a/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py +++ b/src/backend/InvenTree/plugin/builtin/suppliers/test_supplier_barcodes.py @@ -198,7 +198,7 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): result1 = self.post(url, data={'barcode': DIGIKEY_BARCODE}, expected_code=400) - assert result1.data['error'].startswith('No matching purchase order') + self.assertTrue(result1.data['error'].startswith('No matching purchase order')) self.purchase_order1.place_order() @@ -211,8 +211,10 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): result4 = self.post( url, data={'barcode': DIGIKEY_BARCODE[:-1]}, expected_code=400 ) - assert result4.data['error'].startswith( - 'Failed to find pending line item for supplier part' + self.assertTrue( + result4.data['error'].startswith( + 'Failed to find pending line item for supplier part' + ) ) result5 = self.post( @@ -221,38 +223,42 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): expected_code=200, ) stock_item = StockItem.objects.get(pk=result5.data['stockitem']['pk']) - assert stock_item.supplier_part.SKU == '296-LM358BIDDFRCT-ND' - assert stock_item.quantity == 10 - assert stock_item.location is None + self.assertEqual(stock_item.supplier_part.SKU, '296-LM358BIDDFRCT-ND') + self.assertEqual(stock_item.quantity, 10) + self.assertEqual(stock_item.location, None) def test_receive_custom_order_number(self): """Test receiving an item from a barcode with a custom order number.""" url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) - assert 'success' in result1.data + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) + self.assertIn('success', result1.data) result2 = self.post( - reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} + reverse('api-barcode-scan'), + data={'barcode': MOUSER_BARCODE}, + expected_code=200, ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - assert stock_item.supplier_part.SKU == '42' - assert stock_item.supplier_part.manufacturer_part.MPN == 'MC34063ADR' - assert stock_item.quantity == 3 - assert stock_item.location is None + self.assertEqual(stock_item.supplier_part.SKU, '42') + self.assertEqual(stock_item.supplier_part.manufacturer_part.MPN, 'MC34063ADR') + self.assertEqual(stock_item.quantity, 3) + self.assertEqual(stock_item.location, None) def test_receive_one_stock_location(self): """Test receiving an item when only one stock location exists.""" stock_location = StockLocation.objects.create(name='Test Location') url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) - assert 'success' in result1.data + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) + self.assertIn('success', result1.data) result2 = self.post( - reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} + reverse('api-barcode-scan'), + data={'barcode': MOUSER_BARCODE}, + expected_code=200, ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - assert stock_item.location == stock_location + self.assertEqual(stock_item.location, stock_location) def test_receive_default_line_item_location(self): """Test receiving an item into the default line_item location.""" @@ -264,14 +270,16 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): line_item.save() url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) - assert 'success' in result1.data + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) + self.assertIn('success', result1.data) result2 = self.post( - reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} + reverse('api-barcode-scan'), + data={'barcode': MOUSER_BARCODE}, + expected_code=200, ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - assert stock_item.location == stock_location2 + self.assertEqual(stock_item.location, stock_location2) def test_receive_default_part_location(self): """Test receiving an item into the default part location.""" @@ -283,14 +291,16 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): part.save() url = reverse('api-barcode-po-receive') - result1 = self.post(url, data={'barcode': MOUSER_BARCODE}) - assert 'success' in result1.data + result1 = self.post(url, data={'barcode': MOUSER_BARCODE}, expected_code=200) + self.assertIn('success', result1.data) result2 = self.post( - reverse('api-barcode-scan'), data={'barcode': MOUSER_BARCODE} + reverse('api-barcode-scan'), + data={'barcode': MOUSER_BARCODE}, + expected_code=200, ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - assert stock_item.location == stock_location2 + self.assertEqual(stock_item.location, stock_location2) def test_receive_specific_order_and_location(self): """Test receiving an item from a specific order into a specific location.""" @@ -306,12 +316,15 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): 'purchase_order': self.purchase_order2.pk, 'location': stock_location2.pk, }, + expected_code=200, ) - assert 'success' in result1.data + self.assertIn('success', result1.data) - result2 = self.post(reverse('api-barcode-scan'), data={'barcode': barcode}) + result2 = self.post( + reverse('api-barcode-scan'), data={'barcode': barcode}, expected_code=200 + ) stock_item = StockItem.objects.get(pk=result2.data['stockitem']['pk']) - assert stock_item.location == stock_location2 + self.assertEqual(stock_item.location, stock_location2) def test_receive_missing_quantity(self): """Test receiving an with missing quantity information.""" @@ -319,8 +332,8 @@ class SupplierBarcodePOReceiveTests(InvenTreeAPITestCase): barcode = MOUSER_BARCODE.replace('\x1dQ3', '') response = self.post(url, data={'barcode': barcode}, expected_code=200) - assert 'lineitem' in response.data - assert 'quantity' not in response.data['lineitem'] + self.assertIn('lineitem', response.data) + self.assertNotIn('quantity', response.data['lineitem']) DIGIKEY_BARCODE = ( diff --git a/src/backend/InvenTree/plugin/helpers.py b/src/backend/InvenTree/plugin/helpers.py index bd287bcdd8..6e8425ad5a 100644 --- a/src/backend/InvenTree/plugin/helpers.py +++ b/src/backend/InvenTree/plugin/helpers.py @@ -5,14 +5,16 @@ import logging import os import pathlib import pkgutil +import sys import sysconfig import traceback from importlib.metadata import entry_points +from importlib.util import module_from_spec from django import template from django.conf import settings from django.core.exceptions import AppRegistryNotReady -from django.db.utils import IntegrityError, OperationalError, ProgrammingError +from django.db.utils import IntegrityError logger = logging.getLogger('inventree') @@ -110,7 +112,10 @@ def handle_error(error, do_raise: bool = True, do_log: bool = True, log_name: st def get_entrypoints(): """Returns list for entrypoints for InvenTree plugins.""" - return entry_points().get('inventree_plugins', []) + # on python before 3.12, we need to use importlib_metadata + if sys.version_info < (3, 12): + return entry_points().get('inventree_plugins', []) + return entry_points(group='inventree_plugins') # endregion @@ -121,7 +126,8 @@ def get_git_log(path): """Get dict with info of the last commit to file named in path.""" import datetime - from dulwich.repo import NotGitRepository, Repo + from dulwich.errors import NotGitRepository + from dulwich.repo import Repo from InvenTree.ready import isInTestMode @@ -175,9 +181,15 @@ def get_modules(pkg, path=None): elif type(path) is not list: path = [path] - for loader, name, _ in pkgutil.walk_packages(path): + for finder, name, _ in pkgutil.walk_packages(path): try: - module = loader.find_module(name).load_module(name) + if sys.version_info < (3, 12): + module = finder.find_module(name).load_module(name) + else: + spec = finder.find_spec(name) + module = module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) pkg_names = getattr(module, '__all__', None) for k, v in vars(module).items(): if not k.startswith('_') and (pkg_names is None or k in pkg_names): diff --git a/src/backend/InvenTree/plugin/migrations/0009_alter_pluginconfig_key.py b/src/backend/InvenTree/plugin/migrations/0009_alter_pluginconfig_key.py new file mode 100644 index 0000000000..61de4d323c --- /dev/null +++ b/src/backend/InvenTree/plugin/migrations/0009_alter_pluginconfig_key.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.12 on 2024-05-14 22:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('plugin', '0008_pluginconfig_package_name'), + ] + + operations = [ + migrations.AlterField( + model_name='pluginconfig', + name='key', + field=models.CharField(db_index=True, help_text='Key of plugin', max_length=255, unique=True, verbose_name='Key'), + ), + ] diff --git a/src/backend/InvenTree/plugin/mixins/__init__.py b/src/backend/InvenTree/plugin/mixins/__init__.py index 0e39462ad6..369711d8a5 100644 --- a/src/backend/InvenTree/plugin/mixins/__init__.py +++ b/src/backend/InvenTree/plugin/mixins/__init__.py @@ -7,11 +7,8 @@ from plugin.base.event.mixins import EventMixin from plugin.base.integration.APICallMixin import APICallMixin from plugin.base.integration.AppMixin import AppMixin from plugin.base.integration.CurrencyExchangeMixin import CurrencyExchangeMixin -from plugin.base.integration.mixins import ( - NavigationMixin, - PanelMixin, - SettingsContentMixin, -) +from plugin.base.integration.mixins import NavigationMixin, SettingsContentMixin +from plugin.base.integration.PanelMixin import PanelMixin from plugin.base.integration.ReportMixin import ReportMixin from plugin.base.integration.ScheduleMixin import ScheduleMixin from plugin.base.integration.SettingsMixin import SettingsMixin diff --git a/src/backend/InvenTree/plugin/models.py b/src/backend/InvenTree/plugin/models.py index 482b0677c1..c6fee27fd3 100644 --- a/src/backend/InvenTree/plugin/models.py +++ b/src/backend/InvenTree/plugin/models.py @@ -7,7 +7,7 @@ from django.conf import settings from django.contrib import admin from django.contrib.auth.models import User from django.db import models -from django.db.utils import IntegrityError +from django.urls import reverse from django.utils.translation import gettext_lazy as _ import common.models @@ -24,6 +24,11 @@ class PluginConfig(InvenTree.models.MetadataMixin, models.Model): active: Should the plugin be loaded? """ + @staticmethod + def get_api_url(): + """Return the API URL associated with the PluginConfig model.""" + return reverse('api-plugin-list') + class Meta: """Meta for PluginConfig.""" @@ -31,7 +36,11 @@ class PluginConfig(InvenTree.models.MetadataMixin, models.Model): verbose_name_plural = _('Plugin Configurations') key = models.CharField( - unique=True, max_length=255, verbose_name=_('Key'), help_text=_('Key of plugin') + unique=True, + db_index=True, + max_length=255, + verbose_name=_('Key'), + help_text=_('Key of plugin'), ) name = models.CharField( diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index d56ce885ed..27b307df54 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -4,12 +4,15 @@ - Manages setup and teardown of plugin class instances """ -import imp import importlib +import importlib.machinery +import importlib.util import logging import os +import sys import time from collections import OrderedDict +from importlib.machinery import SourceFileLoader from pathlib import Path from threading import Lock from typing import Any @@ -411,9 +414,15 @@ class PluginsRegistry: # Gather Modules if parent_path: - raw_module = imp.load_source( - plugin, str(parent_obj.joinpath('__init__.py')) - ) + # On python 3.12 use new loader method + if sys.version_info < (3, 12): + raw_module = _load_source( + plugin, str(parent_obj.joinpath('__init__.py')) + ) + else: + raw_module = SourceFileLoader( + plugin, str(parent_obj.joinpath('__init__.py')) + ).load_module() else: raw_module = importlib.import_module(plugin) modules = get_plugins(raw_module, InvenTreePlugin, path=parent_path) @@ -749,6 +758,16 @@ class PluginsRegistry: # Some other exception, we want to know about it logger.exception('Failed to update plugin registry hash: %s', str(exc)) + def plugin_settings_keys(self): + """A list of keys which are used to store plugin settings.""" + return [ + 'ENABLE_PLUGINS_URL', + 'ENABLE_PLUGINS_NAVIGATION', + 'ENABLE_PLUGINS_APP', + 'ENABLE_PLUGINS_SCHEDULE', + 'ENABLE_PLUGINS_EVENTS', + ] + def calculate_plugin_hash(self): """Calculate a 'hash' value for the current registry. @@ -768,24 +787,12 @@ class PluginsRegistry: data.update(str(plug.version).encode()) data.update(str(plug.is_active()).encode()) - # Also hash for all config settings which define plugin behavior - keys = [ - 'ENABLE_PLUGINS_URL', - 'ENABLE_PLUGINS_NAVIGATION', - 'ENABLE_PLUGINS_APP', - 'ENABLE_PLUGINS_SCHEDULE', - 'ENABLE_PLUGINS_EVENTS', - ] - - for k in keys: + for k in self.plugin_settings_keys(): try: - data.update( - str( - InvenTreeSetting.get_setting( - k, False, cache=False, create=False - ) - ).encode() - ) + val = InvenTreeSetting.get_setting(k, False, create=False) + msg = f'{k}-{val}' + + data.update(msg.encode()) except Exception: pass @@ -811,7 +818,7 @@ class PluginsRegistry: try: reg_hash = InvenTreeSetting.get_setting( - '_PLUGIN_REGISTRY_HASH', '', create=False, cache=False + '_PLUGIN_REGISTRY_HASH', '', create=False ) except Exception as exc: logger.exception('Failed to retrieve plugin registry hash: %s', str(exc)) @@ -830,3 +837,18 @@ registry: PluginsRegistry = PluginsRegistry() def call_function(plugin_name, function_name, *args, **kwargs): """Global helper function to call a specific member function of a plugin.""" return registry.call_plugin_function(plugin_name, function_name, *args, **kwargs) + + +def _load_source(modname, filename): + """Helper function to replace deprecated & removed imp.load_source. + + See https://docs.python.org/3/whatsnew/3.12.html#imp + """ + loader = importlib.machinery.SourceFileLoader(modname, filename) + spec = importlib.util.spec_from_file_location(modname, filename, loader=loader) + module = importlib.util.module_from_spec(spec) + # The module is always executed and not cached in sys.modules. + # Uncomment the following line to cache the module. + # sys.modules[module.__name__] = module + loader.exec_module(module) + return module diff --git a/src/backend/InvenTree/plugin/samples/integration/label_sample.py b/src/backend/InvenTree/plugin/samples/integration/label_sample.py index 7e7c5c8645..312205314e 100644 --- a/src/backend/InvenTree/plugin/samples/integration/label_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/label_sample.py @@ -34,7 +34,9 @@ class SampleLabelPrinter(LabelPrintingMixin, InvenTreePlugin): print(f"Printing Label: {kwargs['filename']} (User: {kwargs['user']})") pdf_data = kwargs['pdf_data'] - png_file = self.render_to_png(label=None, pdf_data=pdf_data) + png_file = self.render_to_png( + kwargs['label_instance'], kwargs['item_instance'], **kwargs + ) filename = str(BASE_DIR / '_testfolder' / 'label.pdf') diff --git a/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py b/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py index a0b37b53f1..d81fcd1873 100644 --- a/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/report_plugin_sample.py @@ -4,7 +4,7 @@ import random from plugin import InvenTreePlugin from plugin.mixins import ReportMixin -from report.models import PurchaseOrderReport +from report.models import ReportTemplate class SampleReportPlugin(ReportMixin, InvenTreePlugin): @@ -32,7 +32,7 @@ class SampleReportPlugin(ReportMixin, InvenTreePlugin): context['random_int'] = self.some_custom_function() # We can also add extra data to the context which is specific to the report type - context['is_purchase_order'] = isinstance(report_instance, PurchaseOrderReport) + context['is_purchase_order'] = report_instance.model_type == 'purchaseorder' # We can also use the 'request' object to add extra context data context['request_method'] = request.method diff --git a/src/backend/InvenTree/plugin/samples/integration/transition.py b/src/backend/InvenTree/plugin/samples/integration/transition.py index 97166506bd..b0a6ff1826 100644 --- a/src/backend/InvenTree/plugin/samples/integration/transition.py +++ b/src/backend/InvenTree/plugin/samples/integration/transition.py @@ -2,8 +2,8 @@ from common.notifications import trigger_notification from generic.states import TransitionMethod -from InvenTree.status_codes import ReturnOrderStatus from order.models import ReturnOrder +from order.status_codes import ReturnOrderStatus from plugin import InvenTreePlugin diff --git a/src/backend/InvenTree/plugin/samples/integration/validation_sample.py b/src/backend/InvenTree/plugin/samples/integration/validation_sample.py index c1edd4e980..09362b0135 100644 --- a/src/backend/InvenTree/plugin/samples/integration/validation_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/validation_sample.py @@ -145,7 +145,17 @@ class SampleValidatorPlugin(SettingsMixin, ValidationMixin, InvenTreePlugin): if len(batch_code) > 0 and prefix and not batch_code.startswith(prefix): self.raise_error(f"Batch code must start with '{prefix}'") - def generate_batch_code(self): + def generate_batch_code(self, **kwargs): """Generate a new batch code.""" now = datetime.now() - return f'BATCH-{now.year}:{now.month}:{now.day}' + batch = f'SAMPLE-BATCH-{now.year}:{now.month}:{now.day}' + + # If a Part instance is provided, prepend the part name to the batch code + if part := kwargs.get('part', None): + batch = f'{part.name}-{batch}' + + # If a Build instance is provided, prepend the build number to the batch code + if build := kwargs.get('build_order', None): + batch = f'{build.reference}-{batch}' + + return batch diff --git a/src/backend/InvenTree/plugin/serializers.py b/src/backend/InvenTree/plugin/serializers.py index 507ba20799..aa4deffa1a 100644 --- a/src/backend/InvenTree/plugin/serializers.py +++ b/src/backend/InvenTree/plugin/serializers.py @@ -150,6 +150,11 @@ class PluginConfigEmptySerializer(serializers.Serializer): class PluginReloadSerializer(serializers.Serializer): """Serializer for remotely forcing plugin registry reload.""" + class Meta: + """Meta for serializer.""" + + fields = ['full_reload', 'force_reload', 'collect_plugins'] + full_reload = serializers.BooleanField( required=False, default=False, @@ -189,6 +194,11 @@ class PluginActivateSerializer(serializers.Serializer): model = PluginConfig + class Meta: + """Metaclass for serializer.""" + + fields = ['active'] + active = serializers.BooleanField( required=False, default=True, @@ -213,6 +223,11 @@ class PluginActivateSerializer(serializers.Serializer): class PluginUninstallSerializer(serializers.Serializer): """Serializer for uninstalling a plugin.""" + class Meta: + """Metaclass for serializer.""" + + fields = ['delete_config'] + delete_config = serializers.BooleanField( required=False, default=True, @@ -253,6 +268,11 @@ class NotificationUserSettingSerializer(GenericReferencedSettingSerializer): class PluginRegistryErrorSerializer(serializers.Serializer): """Serializer for a plugin registry error.""" + class Meta: + """Meta for serializer.""" + + fields = ['stage', 'name', 'message'] + stage = serializers.CharField() name = serializers.CharField() message = serializers.CharField() @@ -261,4 +281,33 @@ class PluginRegistryErrorSerializer(serializers.Serializer): class PluginRegistryStatusSerializer(serializers.Serializer): """Serializer for plugin registry status.""" + class Meta: + """Meta for serializer.""" + + fields = ['active_plugins', 'registry_errors'] + + active_plugins = serializers.IntegerField(read_only=True) registry_errors = serializers.ListField(child=PluginRegistryErrorSerializer()) + + +class PluginRelationSerializer(serializers.PrimaryKeyRelatedField): + """Serializer for a plugin field. Uses the 'slug' of the plugin as the lookup.""" + + def __init__(self, **kwargs): + """Custom init routine for the serializer.""" + kwargs['pk_field'] = 'key' + kwargs['queryset'] = PluginConfig.objects.all() + + super().__init__(**kwargs) + + def use_pk_only_optimization(self): + """Disable the PK optimization.""" + return False + + def to_internal_value(self, data): + """Lookup the PluginConfig object based on the slug.""" + return PluginConfig.objects.filter(key=data).first() + + def to_representation(self, value): + """Return the 'key' of the PluginConfig object.""" + return value.key diff --git a/src/backend/InvenTree/plugin/templatetags/plugin_extras.py b/src/backend/InvenTree/plugin/templatetags/plugin_extras.py index 0483b1588e..26612b76ba 100644 --- a/src/backend/InvenTree/plugin/templatetags/plugin_extras.py +++ b/src/backend/InvenTree/plugin/templatetags/plugin_extras.py @@ -6,7 +6,7 @@ from django.urls import reverse from common.models import InvenTreeSetting from common.notifications import storage -from plugin import registry +from plugin.registry import registry register = template.Library() diff --git a/src/backend/InvenTree/plugin/test_api.py b/src/backend/InvenTree/plugin/test_api.py index b66282f21b..ed4ae7439b 100644 --- a/src/backend/InvenTree/plugin/test_api.py +++ b/src/backend/InvenTree/plugin/test_api.py @@ -35,18 +35,25 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): 'packagename': 'invalid_package_name-asdads-asfd-asdf-asdf-asdf', }, expected_code=400, + max_query_time=20, ) # valid - Pypi data = self.post( - url, {'confirm': True, 'packagename': self.PKG_NAME}, expected_code=201 + url, + {'confirm': True, 'packagename': self.PKG_NAME}, + expected_code=201, + max_query_time=20, ).data self.assertEqual(data['success'], 'Installed plugin successfully') # valid - github url data = self.post( - url, {'confirm': True, 'url': self.PKG_URL}, expected_code=201 + url, + {'confirm': True, 'url': self.PKG_URL}, + expected_code=201, + max_query_time=20, ).data self.assertEqual(data['success'], 'Installed plugin successfully') @@ -56,6 +63,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): url, {'confirm': True, 'url': self.PKG_URL, 'packagename': self.PKG_NAME}, expected_code=201, + max_query_time=20, ).data self.assertEqual(data['success'], 'Installed plugin successfully') @@ -97,12 +105,10 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): assert plgs is not None self.assertEqual(plgs.active, active) + url = reverse('api-plugin-detail-activate', kwargs={'plugin': test_plg.key}) + # Should not work - not a superuser - response = self.client.post( - reverse('api-plugin-detail-activate', kwargs={'pk': test_plg.pk}), - {}, - follow=True, - ) + response = self.client.post(url, {}, follow=True) self.assertEqual(response.status_code, 403) # Make user superuser @@ -115,11 +121,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): # Activate plugin with detail url assert_plugin_active(self, False) - response = self.client.patch( - reverse('api-plugin-detail-activate', kwargs={'pk': test_plg.pk}), - {}, - follow=True, - ) + response = self.client.patch(url, {}, follow=True) self.assertEqual(response.status_code, 200) assert_plugin_active(self, True) @@ -129,11 +131,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): # Activate plugin assert_plugin_active(self, False) - response = self.client.patch( - reverse('api-plugin-detail-activate', kwargs={'pk': test_plg.pk}), - {}, - follow=True, - ) + response = self.client.patch(url, {}, follow=True) self.assertEqual(response.status_code, 200) assert_plugin_active(self, True) @@ -196,8 +194,9 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): mixin_dict = plg.mixins() self.assertIn('base', mixin_dict) - self.assertDictContainsSubset( - {'base': {'key': 'base', 'human_name': 'base'}}, mixin_dict + self.assertEqual( + mixin_dict, + {**mixin_dict, **{'base': {'key': 'base', 'human_name': 'base'}}}, ) # check reload on save @@ -236,7 +235,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): cfg = PluginConfig.objects.filter(key='sample').first() assert cfg is not None - url = reverse('api-plugin-detail-activate', kwargs={'pk': cfg.pk}) + url = reverse('api-plugin-detail-activate', kwargs={'plugin': cfg.key}) self.client.patch(url, {}, expected_code=200) # Valid plugin settings endpoints diff --git a/src/backend/InvenTree/plugin/test_helpers.py b/src/backend/InvenTree/plugin/test_helpers.py index 4a32c02fb9..95cff3ea95 100644 --- a/src/backend/InvenTree/plugin/test_helpers.py +++ b/src/backend/InvenTree/plugin/test_helpers.py @@ -22,5 +22,5 @@ class HelperTests(TestCase): response = render_template( ErrorSource(), 'sample/wrongsample.html', {'abc': 123} ) - self.assertTrue('lert alert-block alert-danger' in response) - self.assertTrue('Template file sample/wrongsample.html' in response) + self.assertIn('lert alert-block alert-danger', response) + self.assertIn('Template file sample/wrongsample.html', response) diff --git a/src/backend/InvenTree/plugin/test_plugin.py b/src/backend/InvenTree/plugin/test_plugin.py index 557a86b75a..cff4373975 100644 --- a/src/backend/InvenTree/plugin/test_plugin.py +++ b/src/backend/InvenTree/plugin/test_plugin.py @@ -275,13 +275,13 @@ class RegistryTests(TestCase): self.assertEqual(len(registry.errors), 3) # There should be at least one discovery error in the module `broken_file` - self.assertTrue(len(registry.errors.get('discovery')) > 0) + self.assertGreater(len(registry.errors.get('discovery')), 0) self.assertEqual( registry.errors.get('discovery')[0]['broken_file'], "name 'bb' is not defined", ) # There should be at least one load error with an intentional KeyError - self.assertTrue(len(registry.errors.get('load')) > 0) + self.assertGreater(len(registry.errors.get('load')), 0) self.assertEqual( registry.errors.get('load')[0]['broken_sample'], "'This is a dummy error'" ) diff --git a/src/backend/InvenTree/plugin/urls.py b/src/backend/InvenTree/plugin/urls.py index a551d9d9e5..ac454e588e 100644 --- a/src/backend/InvenTree/plugin/urls.py +++ b/src/backend/InvenTree/plugin/urls.py @@ -9,15 +9,12 @@ PLUGIN_BASE = 'plugin' # Constant for links def get_plugin_urls(): """Returns a urlpattern that can be integrated into the global urls.""" from common.models import InvenTreeSetting - from plugin import registry + from plugin.registry import registry urls = [] - # Only allow custom routing if the setting is enabled if ( - InvenTreeSetting.get_setting( - 'ENABLE_PLUGINS_URL', False, create=False, cache=False - ) + InvenTreeSetting.get_setting('ENABLE_PLUGINS_URL', False) or settings.PLUGIN_TESTING_SETUP ): for plugin in registry.plugins.values(): diff --git a/src/backend/InvenTree/report/admin.py b/src/backend/InvenTree/report/admin.py index 6a715f9134..04cab87349 100644 --- a/src/backend/InvenTree/report/admin.py +++ b/src/backend/InvenTree/report/admin.py @@ -2,32 +2,32 @@ from django.contrib import admin +from .helpers import report_model_options from .models import ( - BillOfMaterialsReport, - BuildReport, - PurchaseOrderReport, + LabelOutput, + LabelTemplate, ReportAsset, + ReportOutput, ReportSnippet, - ReturnOrderReport, - SalesOrderReport, - StockLocationReport, - TestReport, + ReportTemplate, ) -@admin.register( - BillOfMaterialsReport, - BuildReport, - PurchaseOrderReport, - ReturnOrderReport, - SalesOrderReport, - StockLocationReport, - TestReport, -) -class ReportTemplateAdmin(admin.ModelAdmin): - """Admin class for the various reporting models.""" +@admin.register(LabelTemplate) +@admin.register(ReportTemplate) +class ReportAdmin(admin.ModelAdmin): + """Admin class for the LabelTemplate and ReportTemplate models.""" - list_display = ('name', 'description', 'template', 'filters', 'enabled', 'revision') + list_display = ('name', 'description', 'model_type', 'enabled') + + list_filter = ('model_type', 'enabled') + + def formfield_for_dbfield(self, db_field, request, **kwargs): + """Provide custom choices for 'model_type' field.""" + if db_field.name == 'model_type': + db_field.choices = report_model_options() + + return super().formfield_for_dbfield(db_field, request, **kwargs) @admin.register(ReportSnippet) @@ -42,3 +42,11 @@ class ReportAssetAdmin(admin.ModelAdmin): """Admin class for the ReportAsset model.""" list_display = ('id', 'asset', 'description') + + +@admin.register(LabelOutput) +@admin.register(ReportOutput) +class TemplateOutputAdmin(admin.ModelAdmin): + """Admin class for the TemplateOutput model.""" + + list_display = ('id', 'output', 'progress', 'complete') diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index 315c6b0159..c4e566067b 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -1,164 +1,337 @@ """API functionality for the 'report' app.""" -from django.core.exceptions import FieldError, ValidationError +from django.core.exceptions import ValidationError from django.core.files.base import ContentFile -from django.http import HttpResponse from django.template.exceptions import TemplateDoesNotExist -from django.urls import include, path, re_path +from django.urls import include, path from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.views.decorators.cache import cache_page, never_cache +from django_filters import rest_framework as rest_filters from django_filters.rest_framework import DjangoFilterBackend +from rest_framework import permissions +from rest_framework.generics import GenericAPIView +from rest_framework.request import clone_request from rest_framework.response import Response -import build.models import common.models +import InvenTree.exceptions import InvenTree.helpers -import order.models -import part.models +import InvenTree.permissions +import report.helpers import report.models import report.serializers -from InvenTree.api import MetadataView +from InvenTree.api import BulkDeleteMixin, MetadataView from InvenTree.exceptions import log_error from InvenTree.filters import InvenTreeSearchFilter -from InvenTree.mixins import ListCreateAPI, RetrieveAPI, RetrieveUpdateDestroyAPI -from stock.models import StockItem, StockItemAttachment, StockLocation +from InvenTree.mixins import ( + ListAPI, + ListCreateAPI, + RetrieveAPI, + RetrieveUpdateDestroyAPI, +) +from plugin.builtin.labels.inventree_label import InvenTreeLabelPlugin +from plugin.registry import registry -class ReportListView(ListCreateAPI): - """Generic API class for report templates.""" +class TemplatePermissionMixin: + """Permission mixin for report and label templates.""" - filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] - - filterset_fields = ['enabled'] - - search_fields = ['name', 'description'] - - -class ReportFilterMixin: - """Mixin for extracting multiple objects from query params. - - Each subclass *must* have an attribute called 'ITEM_KEY', - which is used to determine what 'key' is used in the query parameters. - - This mixin defines a 'get_items' method which provides a generic implementation - to return a list of matching database model instances - """ - - # Database model for instances to actually be "printed" against this report template - ITEM_MODEL = None - - # Default key for looking up database model instances - ITEM_KEY = 'item' - - def get_items(self): - """Return a list of database objects from query parameters.""" - if not self.ITEM_MODEL: - raise NotImplementedError( - f'ITEM_MODEL attribute not defined for {__class__}' - ) - - ids = [] - - # Construct a list of possible query parameter value options - # e.g. if self.ITEM_KEY = 'order' -> ['order', 'order[]', 'orders', 'orders[]'] - for k in [self.ITEM_KEY + x for x in ['', '[]', 's', 's[]']]: - if ids := self.request.query_params.getlist(k, []): - # Return the first list of matches - break - - # Next we must validated each provided object ID - valid_ids = [] - - for id in ids: - try: - valid_ids.append(int(id)) - except ValueError: - pass - - # Filter queryset by matching ID values - return self.ITEM_MODEL.objects.filter(pk__in=valid_ids) - - def filter_queryset(self, queryset): - """Filter the queryset based on the provided report ID values. - - As each 'report' instance may optionally define its own filters, - the resulting queryset is the 'union' of the two - """ - queryset = super().filter_queryset(queryset) - - items = self.get_items() - - if len(items) > 0: - """At this point, we are basically forced to be inefficient: - - We need to compare the 'filters' string of each report template, - and see if it matches against each of the requested items. - - In practice, this is not too bad. - """ - - valid_report_ids = set() - - for report in queryset.all(): - matches = True - - try: - filters = InvenTree.helpers.validateFilterString(report.filters) - except ValidationError: - continue - - for item in items: - item_query = self.ITEM_MODEL.objects.filter(pk=item.pk) - - try: - if not item_query.filter(**filters).exists(): - matches = False - break - except FieldError: - matches = False - break - - # Matched all items - if matches: - valid_report_ids.add(report.pk) - - # Reduce queryset to only valid matches - queryset = queryset.filter(pk__in=list(valid_report_ids)) - - return queryset + # Read only for non-staff users + permission_classes = [ + permissions.IsAuthenticated, + InvenTree.permissions.IsStaffOrReadOnly, + ] @method_decorator(cache_page(5), name='dispatch') -class ReportPrintMixin: - """Mixin for printing reports.""" +class TemplatePrintBase(RetrieveAPI): + """Base class for printing against templates.""" @method_decorator(never_cache) def dispatch(self, *args, **kwargs): """Prevent caching when printing report templates.""" return super().dispatch(*args, **kwargs) - def report_callback(self, object, report, request): - """Callback function for each object/report combination. + def check_permissions(self, request): + """Override request method to GET so that also non superusers can print using a post request.""" + if request.method == 'POST': + request = clone_request(request, 'GET') + return super().check_permissions(request) - Allows functionality to be performed before returning the consolidated PDF + def post(self, request, *args, **kwargs): + """Respond as if a POST request was provided.""" + return self.get(request, *args, **kwargs) - Arguments: - object: The model instance to be printed - report: The individual PDF file object - request: The request instance associated with this print call + def get(self, request, *args, **kwargs): + """GET action for a template printing endpoint. + + - Items are expected to be passed as a list of valid IDs """ - ... + # Extract a list of items to print from the queryset + item_ids = [] - def print(self, request, items_to_print): - """Print this report template against a number of pre-validated items.""" - if len(items_to_print) == 0: - # No valid items provided, return an error message - data = {'error': _('No valid objects provided to template')} + for value in request.query_params.get('items', '').split(','): + try: + item_ids.append(int(value)) + except Exception: + pass - return Response(data, status=400) + template = self.get_object() + items = template.get_model().objects.filter(pk__in=item_ids) + + if len(items) == 0: + # At least one item must be provided + return Response( + {'error': _('No valid objects provided to template')}, status=400 + ) + + return self.print(request, items) + + +class ReportFilterBase(rest_filters.FilterSet): + """Base filter class for label and report templates.""" + + enabled = rest_filters.BooleanFilter() + + model_type = rest_filters.ChoiceFilter( + choices=report.helpers.report_model_options(), label=_('Model Type') + ) + + items = rest_filters.CharFilter(method='filter_items', label=_('Items')) + + def filter_items(self, queryset, name, values): + """Filter against a comma-separated list of provided items. + + Note: This filter is only applied if the 'model_type' is also provided. + """ + model_type = self.data.get('model_type', None) + values = values.strip().split(',') + + if model_class := report.helpers.report_model_from_name(model_type): + model_items = model_class.objects.filter(pk__in=values) + + # Ensure that we have already filtered by model_type + queryset = queryset.filter(model_type=model_type) + + # Construct a list of templates which match the list of provided IDs + matching_template_ids = [] + + for template in queryset.all(): + filters = template.get_filters() + results = model_items.filter(**filters) + # If the resulting queryset is *shorter* than the provided items, then this template does not match + if results.count() == model_items.count(): + matching_template_ids.append(template.pk) + + queryset = queryset.filter(pk__in=matching_template_ids) + + return queryset + + +class ReportFilter(ReportFilterBase): + """Filter class for report template list.""" + + class Meta: + """Filter options.""" + + model = report.models.ReportTemplate + fields = ['landscape'] + + +class LabelFilter(ReportFilterBase): + """Filter class for label template list.""" + + class Meta: + """Filter options.""" + + model = report.models.LabelTemplate + fields = [] + + +class LabelPrint(GenericAPIView): + """API endpoint for printing labels.""" + + # Any authenticated user can print labels + permission_classes = [permissions.IsAuthenticated] + serializer_class = report.serializers.LabelPrintSerializer + + def get_plugin_class(self, plugin_slug: str, raise_error=False): + """Return the plugin class for the given plugin key.""" + from plugin.models import PluginConfig + + if not plugin_slug: + # Use the default label printing plugin + plugin_slug = InvenTreeLabelPlugin.NAME.lower() + + plugin = None + + try: + plugin_config = PluginConfig.objects.get(key=plugin_slug) + plugin = plugin_config.plugin + except (ValueError, PluginConfig.DoesNotExist): + pass + + error = None + + if not plugin: + error = _('Plugin not found') + elif not plugin.is_active(): + error = _('Plugin is not active') + elif not plugin.mixin_enabled('labels'): + error = _('Plugin does not support label printing') + + if error: + plugin = None + + if raise_error: + raise ValidationError({'plugin': error}) + + return plugin + + def get_plugin_serializer(self, plugin): + """Return the serializer for the given plugin.""" + if plugin and hasattr(plugin, 'get_printing_options_serializer'): + return plugin.get_printing_options_serializer( + self.request, + data=self.request.data, + context=self.get_serializer_context(), + ) + + return None + + def get_serializer(self, *args, **kwargs): + """Return serializer information for the label print endpoint.""" + plugin = None + + # Plugin information provided? + if self.request: + plugin_key = self.request.data.get('plugin', '') + # Legacy url based lookup + if not plugin_key: + plugin_key = self.request.query_params.get('plugin', '') + plugin = self.get_plugin_class(plugin_key) + plugin_serializer = self.get_plugin_serializer(plugin) + + if plugin_serializer: + kwargs['plugin_serializer'] = plugin_serializer + + serializer = super().get_serializer(*args, **kwargs) + return serializer + + @method_decorator(never_cache) + def post(self, request, *args, **kwargs): + """POST action for printing labels.""" + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + template = serializer.validated_data['template'] + + if template.width <= 0 or template.height <= 0: + raise ValidationError({'template': _('Invalid label dimensions')}) + + items = serializer.validated_data['items'] + + # Default to the InvenTreeLabelPlugin + plugin_key = InvenTreeLabelPlugin.NAME.lower() + + if plugin_config := serializer.validated_data.get('plugin', None): + plugin_key = plugin_config.key + + plugin = self.get_plugin_class(plugin_key, raise_error=True) + + instances = template.get_model().objects.filter(pk__in=items) + + if instances.count() == 0: + raise ValidationError(_('No valid items provided to template')) + + return self.print(template, instances, plugin, request) + + def print(self, template, items_to_print, plugin, request): + """Print this label template against a number of provided items.""" + if plugin_serializer := plugin.get_printing_options_serializer( + request, data=request.data, context=self.get_serializer_context() + ): + plugin_serializer.is_valid(raise_exception=True) + + # Create a new LabelOutput instance to print against + output = report.models.LabelOutput.objects.create( + template=template, + items=len(items_to_print), + plugin=plugin.slug, + user=request.user, + progress=0, + complete=False, + ) + + try: + plugin.before_printing() + plugin.print_labels( + template, + output, + items_to_print, + request, + printing_options=(plugin_serializer.data if plugin_serializer else {}), + ) + plugin.after_printing() + except ValidationError as e: + raise (e) + except Exception as e: + InvenTree.exceptions.log_error(f'plugins.{plugin.slug}.print_labels') + raise ValidationError([_('Error printing label'), str(e)]) + + output.refresh_from_db() + + return Response( + report.serializers.LabelOutputSerializer(output).data, status=201 + ) + + +class LabelTemplateList(TemplatePermissionMixin, ListCreateAPI): + """API endpoint for viewing list of LabelTemplate objects.""" + + queryset = report.models.LabelTemplate.objects.all() + serializer_class = report.serializers.LabelTemplateSerializer + filterset_class = LabelFilter + filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] + search_fields = ['name', 'description'] + ordering_fields = ['name', 'enabled'] + + +class LabelTemplateDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): + """Detail API endpoint for label template model.""" + + queryset = report.models.LabelTemplate.objects.all() + serializer_class = report.serializers.LabelTemplateSerializer + + +class ReportPrint(GenericAPIView): + """API endpoint for printing reports.""" + + # Any authenticated user can print reports + permission_classes = [permissions.IsAuthenticated] + serializer_class = report.serializers.ReportPrintSerializer + + @method_decorator(never_cache) + def post(self, request, *args, **kwargs): + """POST action for printing a report.""" + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + template = serializer.validated_data['template'] + items = serializer.validated_data['items'] + + instances = template.get_model().objects.filter(pk__in=items) + + if instances.count() == 0: + raise ValidationError(_('No valid items provided to template')) + + return self.print(template, instances, request) + + def print(self, template, items_to_print, request): + """Print this report template against a number of provided items.""" outputs = [] # In debug mode, generate single HTML output, rather than PDF @@ -171,25 +344,30 @@ class ReportPrintMixin: try: # Merge one or more PDF files into a single download - for item in items_to_print: - report = self.get_object() - report.object_to_print = item + for instance in items_to_print: + context = template.get_context(instance, request) + report_name = template.generate_filename(context) - report_name = report.generate_filename(request) - output = report.render(request) + output = template.render(instance, request) - # Run report callback for each generated report - self.report_callback(item, output, request) + # Provide generated report to any interested plugins + for plugin in registry.with_mixin('report'): + try: + plugin.report_callback(self, instance, output, request) + except Exception as e: + InvenTree.exceptions.log_error( + f'plugins.{plugin.slug}.report_callback' + ) try: if debug_mode: - outputs.append(report.render_as_string(request)) + outputs.append(template.render_as_string(instance, request)) else: - outputs.append(output) + outputs.append(template.render(instance, request)) except TemplateDoesNotExist as e: template = str(e) if not template: - template = report.template + template = template.template return Response( { @@ -206,9 +384,8 @@ class ReportPrintMixin: if debug_mode: """Concatenate all rendered templates into a single HTML string, and return the string as a HTML response.""" - html = '\n'.join(outputs) - - return HttpResponse(html) + data = '\n'.join(outputs) + report_name = report_name.replace('.pdf', '.html') else: """Concatenate all rendered pages into a single PDF object, and return the resulting document!""" @@ -220,13 +397,13 @@ class ReportPrintMixin: for page in doc.pages: pages.append(page) - pdf = outputs[0].get_document().copy(pages).write_pdf() + data = outputs[0].get_document().copy(pages).write_pdf() except TemplateDoesNotExist as e: template = str(e) if not template: - template = report.template + template = template.template return Response( { @@ -237,14 +414,6 @@ class ReportPrintMixin: status=400, ) - inline = common.models.InvenTreeUserSetting.get_setting( - 'REPORT_INLINE', user=request.user, cache=False - ) - - return InvenTree.helpers.DownloadFile( - pdf, report_name, content_type='application/pdf', inline=inline - ) - except Exception as exc: # Log the exception to the database if InvenTree.helpers.str2bool( @@ -261,273 +430,147 @@ class ReportPrintMixin: 'path': request.path, }) - def get(self, request, *args, **kwargs): - """Default implementation of GET for a print endpoint. + # Generate a report output object + # TODO: This should be moved to a separate function + # TODO: Allow background printing of reports, with progress reporting + output = report.models.ReportOutput.objects.create( + template=template, + items=len(items_to_print), + user=request.user, + progress=100, + complete=True, + output=ContentFile(data, report_name), + ) - Note that it expects the class has defined a get_items() method - """ - items = self.get_items() - return self.print(request, items) + return Response( + report.serializers.ReportOutputSerializer(output).data, status=201 + ) -class StockItemTestReportMixin(ReportFilterMixin): - """Mixin for StockItemTestReport report template.""" +class ReportTemplateList(TemplatePermissionMixin, ListCreateAPI): + """API endpoint for viewing list of ReportTemplate objects.""" - ITEM_MODEL = StockItem - ITEM_KEY = 'item' - queryset = report.models.TestReport.objects.all() - serializer_class = report.serializers.TestReportSerializer + queryset = report.models.ReportTemplate.objects.all() + serializer_class = report.serializers.ReportTemplateSerializer + filterset_class = ReportFilter + filter_backends = [DjangoFilterBackend, InvenTreeSearchFilter] + search_fields = ['name', 'description'] + ordering_fields = ['name', 'enabled'] -class StockItemTestReportList(StockItemTestReportMixin, ReportListView): - """API endpoint for viewing list of TestReport objects. +class ReportTemplateDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): + """Detail API endpoint for report template model.""" - Filterable by: + queryset = report.models.ReportTemplate.objects.all() + serializer_class = report.serializers.ReportTemplateSerializer - - enabled: Filter by enabled / disabled status - - item: Filter by stock item(s) - """ - pass - - -class StockItemTestReportDetail(StockItemTestReportMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single TestReport object.""" - - pass - - -class StockItemTestReportPrint(StockItemTestReportMixin, ReportPrintMixin, RetrieveAPI): - """API endpoint for printing a TestReport object.""" - - def report_callback(self, item, report, request): - """Callback to (optionally) save a copy of the generated report.""" - if common.models.InvenTreeSetting.get_setting( - 'REPORT_ATTACH_TEST_REPORT', cache=False - ): - # Construct a PDF file object - try: - pdf = report.get_document().write_pdf() - pdf_content = ContentFile(pdf, 'test_report.pdf') - except TemplateDoesNotExist: - return - - StockItemAttachment.objects.create( - attachment=pdf_content, - stock_item=item, - user=request.user, - comment=_('Test report'), - ) - - -class BOMReportMixin(ReportFilterMixin): - """Mixin for BillOfMaterialsReport report template.""" - - ITEM_MODEL = part.models.Part - ITEM_KEY = 'part' - - queryset = report.models.BillOfMaterialsReport.objects.all() - serializer_class = report.serializers.BOMReportSerializer - - -class BOMReportList(BOMReportMixin, ReportListView): - """API endpoint for viewing a list of BillOfMaterialReport objects. - - Filterably by: - - - enabled: Filter by enabled / disabled status - - part: Filter by part(s) - """ - - pass - - -class BOMReportDetail(BOMReportMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single BillOfMaterialReport object.""" - - pass - - -class BOMReportPrint(BOMReportMixin, ReportPrintMixin, RetrieveAPI): - """API endpoint for printing a BillOfMaterialReport object.""" - - pass - - -class BuildReportMixin(ReportFilterMixin): - """Mixin for the BuildReport report template.""" - - ITEM_MODEL = build.models.Build - ITEM_KEY = 'build' - - queryset = report.models.BuildReport.objects.all() - serializer_class = report.serializers.BuildReportSerializer - - -class BuildReportList(BuildReportMixin, ReportListView): - """API endpoint for viewing a list of BuildReport objects. - - Can be filtered by: - - - enabled: Filter by enabled / disabled status - - build: Filter by Build object - """ - - pass - - -class BuildReportDetail(BuildReportMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single BuildReport object.""" - - pass - - -class BuildReportPrint(BuildReportMixin, ReportPrintMixin, RetrieveAPI): - """API endpoint for printing a BuildReport.""" - - pass - - -class PurchaseOrderReportMixin(ReportFilterMixin): - """Mixin for the PurchaseOrderReport report template.""" - - ITEM_MODEL = order.models.PurchaseOrder - ITEM_KEY = 'order' - - queryset = report.models.PurchaseOrderReport.objects.all() - serializer_class = report.serializers.PurchaseOrderReportSerializer - - -class PurchaseOrderReportList(PurchaseOrderReportMixin, ReportListView): - """API list endpoint for the PurchaseOrderReport model.""" - - pass - - -class PurchaseOrderReportDetail(PurchaseOrderReportMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single PurchaseOrderReport object.""" - - pass - - -class PurchaseOrderReportPrint(PurchaseOrderReportMixin, ReportPrintMixin, RetrieveAPI): - """API endpoint for printing a PurchaseOrderReport object.""" - - pass - - -class SalesOrderReportMixin(ReportFilterMixin): - """Mixin for the SalesOrderReport report template.""" - - ITEM_MODEL = order.models.SalesOrder - ITEM_KEY = 'order' - - queryset = report.models.SalesOrderReport.objects.all() - serializer_class = report.serializers.SalesOrderReportSerializer - - -class SalesOrderReportList(SalesOrderReportMixin, ReportListView): - """API list endpoint for the SalesOrderReport model.""" - - pass - - -class SalesOrderReportDetail(SalesOrderReportMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single SalesOrderReport object.""" - - pass - - -class SalesOrderReportPrint(SalesOrderReportMixin, ReportPrintMixin, RetrieveAPI): - """API endpoint for printing a PurchaseOrderReport object.""" - - pass - - -class ReturnOrderReportMixin(ReportFilterMixin): - """Mixin for the ReturnOrderReport report template.""" - - ITEM_MODEL = order.models.ReturnOrder - ITEM_KEY = 'order' - - queryset = report.models.ReturnOrderReport.objects.all() - serializer_class = report.serializers.ReturnOrderReportSerializer - - -class ReturnOrderReportList(ReturnOrderReportMixin, ReportListView): - """API list endpoint for the ReturnOrderReport model.""" - - pass - - -class ReturnOrderReportDetail(ReturnOrderReportMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single ReturnOrderReport object.""" - - pass - - -class ReturnOrderReportPrint(ReturnOrderReportMixin, ReportPrintMixin, RetrieveAPI): - """API endpoint for printing a ReturnOrderReport object.""" - - pass - - -class StockLocationReportMixin(ReportFilterMixin): - """Mixin for StockLocation report template.""" - - ITEM_MODEL = StockLocation - ITEM_KEY = 'location' - queryset = report.models.StockLocationReport.objects.all() - serializer_class = report.serializers.StockLocationReportSerializer - - -class StockLocationReportList(StockLocationReportMixin, ReportListView): - """API list endpoint for the StockLocationReportList model.""" - - pass - - -class StockLocationReportDetail(StockLocationReportMixin, RetrieveUpdateDestroyAPI): - """API endpoint for a single StockLocationReportDetail object.""" - - pass - - -class StockLocationReportPrint(StockLocationReportMixin, ReportPrintMixin, RetrieveAPI): - """API endpoint for printing a StockLocationReportPrint object.""" - - pass - - -class ReportSnippetList(ListCreateAPI): +class ReportSnippetList(TemplatePermissionMixin, ListCreateAPI): """API endpoint for listing ReportSnippet objects.""" queryset = report.models.ReportSnippet.objects.all() serializer_class = report.serializers.ReportSnippetSerializer -class ReportSnippetDetail(RetrieveUpdateDestroyAPI): +class ReportSnippetDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single ReportSnippet object.""" queryset = report.models.ReportSnippet.objects.all() serializer_class = report.serializers.ReportSnippetSerializer -class ReportAssetList(ListCreateAPI): +class ReportAssetList(TemplatePermissionMixin, ListCreateAPI): """API endpoint for listing ReportAsset objects.""" queryset = report.models.ReportAsset.objects.all() serializer_class = report.serializers.ReportAssetSerializer -class ReportAssetDetail(RetrieveUpdateDestroyAPI): +class ReportAssetDetail(TemplatePermissionMixin, RetrieveUpdateDestroyAPI): """API endpoint for a single ReportAsset object.""" queryset = report.models.ReportAsset.objects.all() serializer_class = report.serializers.ReportAssetSerializer +class LabelOutputList(TemplatePermissionMixin, BulkDeleteMixin, ListAPI): + """List endpoint for LabelOutput objects.""" + + queryset = report.models.LabelOutput.objects.all() + serializer_class = report.serializers.LabelOutputSerializer + + +class ReportOutputList(TemplatePermissionMixin, BulkDeleteMixin, ListAPI): + """List endpoint for ReportOutput objects.""" + + queryset = report.models.ReportOutput.objects.all() + serializer_class = report.serializers.ReportOutputSerializer + + +label_api_urls = [ + # Printing endpoint + path('print/', LabelPrint.as_view(), name='api-label-print'), + # Label templates + path( + 'template/', + include([ + path( + '/', + include([ + path( + 'metadata/', + MetadataView.as_view(), + {'model': report.models.LabelTemplate}, + name='api-label-template-metadata', + ), + path( + '', + LabelTemplateDetail.as_view(), + name='api-label-template-detail', + ), + ]), + ), + path('', LabelTemplateList.as_view(), name='api-label-template-list'), + ]), + ), + # Label outputs + path( + 'output/', + include([path('', LabelOutputList.as_view(), name='api-label-output-list')]), + ), +] + report_api_urls = [ + # Printing endpoint + path('print/', ReportPrint.as_view(), name='api-report-print'), + # Report templates + path( + 'template/', + include([ + path( + '/', + include([ + path( + 'metadata/', + MetadataView.as_view(), + {'model': report.models.ReportTemplate}, + name='api-report-template-metadata', + ), + path( + '', + ReportTemplateDetail.as_view(), + name='api-report-template-detail', + ), + ]), + ), + path('', ReportTemplateList.as_view(), name='api-report-template-list'), + ]), + ), + # Generated report outputs + path( + 'output/', + include([path('', ReportOutputList.as_view(), name='api-report-output-list')]), + ), # Report assets path( 'asset/', @@ -550,215 +593,4 @@ report_api_urls = [ path('', ReportSnippetList.as_view(), name='api-report-snippet-list'), ]), ), - # Purchase order reports - path( - 'po/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - PurchaseOrderReportPrint.as_view(), - name='api-po-report-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': report.models.PurchaseOrderReport}, - name='api-po-report-metadata', - ), - path( - '', - PurchaseOrderReportDetail.as_view(), - name='api-po-report-detail', - ), - ]), - ), - # List view - path('', PurchaseOrderReportList.as_view(), name='api-po-report-list'), - ]), - ), - # Sales order reports - path( - 'so/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - SalesOrderReportPrint.as_view(), - name='api-so-report-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': report.models.SalesOrderReport}, - name='api-so-report-metadata', - ), - path( - '', - SalesOrderReportDetail.as_view(), - name='api-so-report-detail', - ), - ]), - ), - path('', SalesOrderReportList.as_view(), name='api-so-report-list'), - ]), - ), - # Return order reports - path( - 'ro/', - include([ - path( - '/', - include([ - path( - r'print/', - ReturnOrderReportPrint.as_view(), - name='api-return-order-report-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': report.models.ReturnOrderReport}, - name='api-so-report-metadata', - ), - path( - '', - ReturnOrderReportDetail.as_view(), - name='api-return-order-report-detail', - ), - ]), - ), - path( - '', ReturnOrderReportList.as_view(), name='api-return-order-report-list' - ), - ]), - ), - # Build reports - path( - 'build/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - BuildReportPrint.as_view(), - name='api-build-report-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': report.models.BuildReport}, - name='api-build-report-metadata', - ), - path( - '', BuildReportDetail.as_view(), name='api-build-report-detail' - ), - ]), - ), - # List view - path('', BuildReportList.as_view(), name='api-build-report-list'), - ]), - ), - # Bill of Material reports - path( - 'bom/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - BOMReportPrint.as_view(), - name='api-bom-report-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'model': report.models.BillOfMaterialsReport}, - name='api-bom-report-metadata', - ), - path('', BOMReportDetail.as_view(), name='api-bom-report-detail'), - ]), - ), - # List view - path('', BOMReportList.as_view(), name='api-bom-report-list'), - ]), - ), - # Stock item test reports - path( - 'test/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - StockItemTestReportPrint.as_view(), - name='api-stockitem-testreport-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'report': report.models.TestReport}, - name='api-stockitem-testreport-metadata', - ), - path( - '', - StockItemTestReportDetail.as_view(), - name='api-stockitem-testreport-detail', - ), - ]), - ), - # List view - path( - '', - StockItemTestReportList.as_view(), - name='api-stockitem-testreport-list', - ), - ]), - ), - # Stock Location reports (Stock Location Reports -> sir) - path( - 'slr/', - include([ - # Detail views - path( - '/', - include([ - re_path( - r'print/?', - StockLocationReportPrint.as_view(), - name='api-stocklocation-report-print', - ), - path( - 'metadata/', - MetadataView.as_view(), - {'report': report.models.StockLocationReport}, - name='api-stocklocation-report-metadata', - ), - path( - '', - StockLocationReportDetail.as_view(), - name='api-stocklocation-report-detail', - ), - ]), - ), - # List view - path( - '', - StockLocationReportList.as_view(), - name='api-stocklocation-report-list', - ), - ]), - ), ] diff --git a/src/backend/InvenTree/report/apps.py b/src/backend/InvenTree/report/apps.py index 7926d4f76a..c5c874f79e 100644 --- a/src/backend/InvenTree/report/apps.py +++ b/src/backend/InvenTree/report/apps.py @@ -1,18 +1,25 @@ """Config options for the report app.""" import logging +import os from pathlib import Path from django.apps import AppConfig +from django.core.exceptions import AppRegistryNotReady +from django.core.files.base import ContentFile +from django.db.utils import IntegrityError, OperationalError, ProgrammingError -from generic.templating.apps import TemplatingMixin +from maintenance_mode.core import maintenance_mode_on, set_maintenance_mode + +import InvenTree.ready + +logger = logging.getLogger('inventree') -class ReportConfig(TemplatingMixin, AppConfig): +class ReportConfig(AppConfig): """Configuration class for the "report" app.""" name = 'report' - db = 'template' def ready(self): """This function is called whenever the app is loaded.""" @@ -22,103 +29,192 @@ class ReportConfig(TemplatingMixin, AppConfig): super().ready() - def create_defaults(self): - """Create all default templates.""" + # skip loading if plugin registry is not loaded or we run in a background thread + if ( + not InvenTree.ready.isPluginRegistryLoaded() + or not InvenTree.ready.isInMainThread() + ): + return + + if not InvenTree.ready.canAppAccessDatabase(allow_test=False): + return # pragma: no cover + + with maintenance_mode_on(): + try: + self.create_default_labels() + self.create_default_reports() + except ( + AppRegistryNotReady, + IntegrityError, + OperationalError, + ProgrammingError, + ): + logger.warning( + 'Database not ready for creating default report templates' + ) + + set_maintenance_mode(False) + + def create_default_labels(self): + """Create default label templates.""" # Test if models are ready try: import report.models except Exception: # pragma: no cover # Database is not ready yet return - assert bool(report.models.TestReport is not None) - # Create the categories - self.create_template_dir( - report.models.TestReport, - [ - { - 'file': 'inventree_test_report.html', - 'name': 'InvenTree Test Report', - 'description': 'Stock item test report', - } - ], - ) + assert bool(report.models.LabelTemplate is not None) - self.create_template_dir( - report.models.BuildReport, - [ - { - 'file': 'inventree_build_order.html', - 'name': 'InvenTree Build Order', - 'description': 'Build Order job sheet', - } - ], - ) + label_templates = [ + { + 'file': 'part_label.html', + 'name': 'InvenTree Part Label', + 'description': 'Sample part label', + 'model_type': 'part', + }, + { + 'file': 'part_label_code128.html', + 'name': 'InvenTree Part Label (Code128)', + 'description': 'Sample part label with Code128 barcode', + 'model_type': 'part', + }, + { + 'file': 'stockitem_qr.html', + 'name': 'InvenTree Stock Item Label (QR)', + 'description': 'Sample stock item label with QR code', + 'model_type': 'stockitem', + }, + { + 'file': 'stocklocation_qr_and_text.html', + 'name': 'InvenTree Stock Location Label (QR + Text)', + 'description': 'Sample stock item label with QR code and text', + 'model_type': 'stocklocation', + }, + { + 'file': 'stocklocation_qr.html', + 'name': 'InvenTree Stock Location Label (QR)', + 'description': 'Sample stock location label with QR code', + 'model_type': 'stocklocation', + }, + { + 'file': 'buildline_label.html', + 'name': 'InvenTree Build Line Label', + 'description': 'Sample build line label', + 'model_type': 'buildline', + }, + ] - self.create_template_dir( - report.models.BillOfMaterialsReport, - [ - { - 'file': 'inventree_bill_of_materials_report.html', - 'name': 'Bill of Materials', - 'description': 'Bill of Materials report', - } - ], - ) + for template in label_templates: + # Ignore matching templates which are already in the database + if report.models.LabelTemplate.objects.filter( + name=template['name'] + ).exists(): + continue - self.create_template_dir( - report.models.PurchaseOrderReport, - [ - { - 'file': 'inventree_po_report.html', - 'name': 'InvenTree Purchase Order', - 'description': 'Purchase Order example report', - } - ], - ) + filename = template.pop('file') - self.create_template_dir( - report.models.SalesOrderReport, - [ - { - 'file': 'inventree_so_report.html', - 'name': 'InvenTree Sales Order', - 'description': 'Sales Order example report', - } - ], - ) + template_file = Path(__file__).parent.joinpath( + 'templates', 'label', filename + ) - self.create_template_dir( - report.models.ReturnOrderReport, - [ - { - 'file': 'inventree_return_order_report.html', - 'name': 'InvenTree Return Order', - 'description': 'Return Order example report', - } - ], - ) + if not template_file.exists(): + logger.warning("Missing template file: '%s'", template['name']) + continue - self.create_template_dir( - report.models.StockLocationReport, - [ - { - 'file': 'inventree_slr_report.html', - 'name': 'InvenTree Stock Location', - 'description': 'Stock Location example report', - } - ], - ) + # Read the existing template file + data = template_file.open('r').read() - def get_src_dir(self, ref_name): - """Get the source directory.""" - return Path(__file__).parent.joinpath('templates', self.name) + logger.info("Creating new label template: '%s'", template['name']) - def get_new_obj_data(self, data, filename): - """Get the data for a new template db object.""" - return { - 'name': data['name'], - 'description': data['description'], - 'template': filename, - 'enabled': True, - } + # Create a new entry + report.models.LabelTemplate.objects.create( + **template, template=ContentFile(data, os.path.basename(filename)) + ) + + def create_default_reports(self): + """Create default report templates.""" + # Test if models are ready + try: + import report.models + except Exception: # pragma: no cover + # Database is not ready yet + return + + assert bool(report.models.ReportTemplate is not None) + + # Construct a set of default ReportTemplate instances + report_templates = [ + { + 'file': 'inventree_bill_of_materials_report.html', + 'name': 'InvenTree Bill of Materials', + 'description': 'Sample bill of materials report', + 'model_type': 'part', + }, + { + 'file': 'inventree_build_order_report.html', + 'name': 'InvenTree Build Order', + 'description': 'Sample build order report', + 'model_type': 'build', + }, + { + 'file': 'inventree_purchase_order_report.html', + 'name': 'InvenTree Purchase Order', + 'description': 'Sample purchase order report', + 'model_type': 'purchaseorder', + 'filename_pattern': 'PurchaseOrder-{{ reference }}.pdf', + }, + { + 'file': 'inventree_sales_order_report.html', + 'name': 'InvenTree Sales Order', + 'description': 'Sample sales order report', + 'model_type': 'salesorder', + 'filename_pattern': 'SalesOrder-{{ reference }}.pdf', + }, + { + 'file': 'inventree_return_order_report.html', + 'name': 'InvenTree Return Order', + 'description': 'Sample return order report', + 'model_type': 'returnorder', + 'filename_pattern': 'ReturnOrder-{{ reference }}.pdf', + }, + { + 'file': 'inventree_test_report.html', + 'name': 'InvenTree Test Report', + 'description': 'Sample stock item test report', + 'model_type': 'stockitem', + }, + { + 'file': 'inventree_stock_location_report.html', + 'name': 'InvenTree Stock Location Report', + 'description': 'Sample stock location report', + 'model_type': 'stocklocation', + }, + ] + + for template in report_templates: + # Ignore matching templates which are already in the database + if report.models.ReportTemplate.objects.filter( + name=template['name'] + ).exists(): + continue + + filename = template.pop('file') + + template_file = Path(__file__).parent.joinpath( + 'templates', 'report', filename + ) + + if not template_file.exists(): + logger.warning("Missing template file: '%s'", template['name']) + continue + + # Read the existing template file + data = template_file.open('r').read() + + logger.info("Creating new report template: '%s'", template['name']) + + # Create a new entry + report.models.ReportTemplate.objects.create( + **template, template=ContentFile(data, os.path.basename(filename)) + ) diff --git a/src/backend/InvenTree/report/helpers.py b/src/backend/InvenTree/report/helpers.py index 43f2baab72..c0720ce348 100644 --- a/src/backend/InvenTree/report/helpers.py +++ b/src/backend/InvenTree/report/helpers.py @@ -9,6 +9,32 @@ from django.utils.translation import gettext_lazy as _ logger = logging.getLogger('inventree') +def report_model_types(): + """Return a list of database models for which reports can be generated.""" + from InvenTree.helpers_model import getModelsWithMixin + from report.mixins import InvenTreeReportMixin + + return list(getModelsWithMixin(InvenTreeReportMixin)) + + +def report_model_from_name(model_name: str): + """Returns the internal model class from the provided name.""" + if not model_name: + return None + + for model in report_model_types(): + if model.__name__.lower() == model_name: + return model + + +def report_model_options(): + """Return a list of options for models which support report printing.""" + return [ + (model.__name__.lower(), model._meta.verbose_name) + for model in report_model_types() + ] + + def report_page_size_options(): """Returns a list of page size options for PDF reports.""" return [ diff --git a/src/backend/InvenTree/report/migrations/0001_initial.py b/src/backend/InvenTree/report/migrations/0001_initial.py index 8b5c2af09f..60b199c44c 100644 --- a/src/backend/InvenTree/report/migrations/0001_initial.py +++ b/src/backend/InvenTree/report/migrations/0001_initial.py @@ -17,7 +17,7 @@ class Migration(migrations.Migration): name='ReportAsset', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('asset', models.FileField(help_text='Report asset file', upload_to=report.models.rename_asset)), + ('asset', models.FileField(help_text='Report asset file', upload_to='report/assets')), ('description', models.CharField(help_text='Asset file description', max_length=250)), ], ), @@ -26,7 +26,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, unique=True)), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), ('description', models.CharField(help_text='Report template description', max_length=250)), ], options={ @@ -38,9 +38,9 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, unique=True)), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])])), ('description', models.CharField(help_text='Report template description', max_length=250)), - ('part_filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validateFilterString])), + ('part_filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250)), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py b/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py index 717176e390..714267e6fd 100644 --- a/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py +++ b/src/backend/InvenTree/report/migrations/0005_auto_20210119_0815.py @@ -2,7 +2,6 @@ import django.core.validators from django.db import migrations, models -import report.models class Migration(migrations.Migration): @@ -20,7 +19,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='filters', - field=models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validate_stock_item_report_filters], verbose_name='Filters'), + field=models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs)', max_length=250, verbose_name='Filters'), ), migrations.AlterField( model_name='testreport', @@ -30,6 +29,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='template', - field=models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])], verbose_name='Template'), + field=models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm', 'tex'])], verbose_name='Template'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0006_reportsnippet.py b/src/backend/InvenTree/report/migrations/0006_reportsnippet.py index 6875ebb530..8a550b1b3f 100644 --- a/src/backend/InvenTree/report/migrations/0006_reportsnippet.py +++ b/src/backend/InvenTree/report/migrations/0006_reportsnippet.py @@ -2,7 +2,6 @@ import django.core.validators from django.db import migrations, models -import report.models class Migration(migrations.Migration): @@ -16,7 +15,7 @@ class Migration(migrations.Migration): name='ReportSnippet', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('snippet', models.FileField(help_text='Report snippet file', upload_to=report.models.rename_snippet, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])])), + ('snippet', models.FileField(help_text='Report snippet file', upload_to='report/snippets', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])])), ('description', models.CharField(help_text='Snippet file description', max_length=250)), ], ), diff --git a/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py b/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py index b110f63365..5cdcb3c189 100644 --- a/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py +++ b/src/backend/InvenTree/report/migrations/0007_auto_20210204_1617.py @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='template', - field=models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), + field=models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py b/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py index b1a93656cf..9545e0fae6 100644 --- a/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py +++ b/src/backend/InvenTree/report/migrations/0011_auto_20210212_2024.py @@ -2,7 +2,6 @@ import django.core.validators from django.db import migrations, models -import report.models class Migration(migrations.Migration): @@ -17,11 +16,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs', max_length=250, validators=[report.models.validate_part_report_filters], verbose_name='Part Filters')), + ('filters', models.CharField(blank=True, help_text='Part query filters (comma-separated list of key=value pairs', max_length=250, verbose_name='Part Filters')), ], options={ 'abstract': False, @@ -30,6 +29,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='testreport', name='filters', - field=models.CharField(blank=True, help_text='StockItem query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validate_stock_item_report_filters], verbose_name='Filters'), + field=models.CharField(blank=True, help_text='StockItem query filters (comma-separated list of key=value pairs)', max_length=250, verbose_name='Filters'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0012_buildreport.py b/src/backend/InvenTree/report/migrations/0012_buildreport.py index b2d3603480..900ef3d2fc 100644 --- a/src/backend/InvenTree/report/migrations/0012_buildreport.py +++ b/src/backend/InvenTree/report/migrations/0012_buildreport.py @@ -2,7 +2,6 @@ import django.core.validators from django.db import migrations, models -import report.models class Migration(migrations.Migration): @@ -17,11 +16,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Build query filters (comma-separated list of key=value pairs', max_length=250, validators=[report.models.validate_build_report_filters], verbose_name='Build Filters')), + ('filters', models.CharField(blank=True, help_text='Build query filters (comma-separated list of key=value pairs', max_length=250, verbose_name='Build Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py b/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py index ab734b7b48..58504048a3 100644 --- a/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py +++ b/src/backend/InvenTree/report/migrations/0014_purchaseorderreport_salesorderreport.py @@ -2,7 +2,6 @@ import django.core.validators from django.db import migrations, models -import report.models class Migration(migrations.Migration): @@ -17,11 +16,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Purchase order query filters', max_length=250, validators=[report.models.validate_purchase_order_filters], verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='Purchase order query filters', max_length=250, verbose_name='Filters')), ], options={ 'abstract': False, @@ -32,11 +31,11 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Sales order query filters', max_length=250, validators=[report.models.validate_sales_order_filters], verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='Sales order query filters', max_length=250, verbose_name='Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py b/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py index 0348db5b35..ceb0ff9baa 100644 --- a/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py +++ b/src/backend/InvenTree/report/migrations/0015_auto_20210403_1837.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='reportasset', name='asset', - field=models.FileField(help_text='Report asset file', upload_to=report.models.rename_asset, verbose_name='Asset'), + field=models.FileField(help_text='Report asset file', upload_to='report/assets', verbose_name='Asset'), ), migrations.AlterField( model_name='reportasset', @@ -30,6 +30,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='reportsnippet', name='snippet', - field=models.FileField(help_text='Report snippet file', upload_to=report.models.rename_snippet, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Snippet'), + field=models.FileField(help_text='Report snippet file', upload_to='report/snippets', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Snippet'), ), ] diff --git a/src/backend/InvenTree/report/migrations/0018_returnorderreport.py b/src/backend/InvenTree/report/migrations/0018_returnorderreport.py index 8bdbb6ebe8..04822b4a78 100644 --- a/src/backend/InvenTree/report/migrations/0018_returnorderreport.py +++ b/src/backend/InvenTree/report/migrations/0018_returnorderreport.py @@ -2,7 +2,6 @@ import django.core.validators from django.db import migrations, models -import report.models class Migration(migrations.Migration): @@ -17,12 +16,12 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('filename_pattern', models.CharField(default='report.pdf', help_text='Pattern for generating report filenames', max_length=100, verbose_name='Filename Pattern')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='Return order query filters', max_length=250, validators=[report.models.validate_return_order_filters], verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='Return order query filters', max_length=250, verbose_name='Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py b/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py index b43c414e3b..048d5455cf 100644 --- a/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py +++ b/src/backend/InvenTree/report/migrations/0020_stocklocationreport.py @@ -2,7 +2,6 @@ import django.core.validators from django.db import migrations, models -import report.models class Migration(migrations.Migration): @@ -18,12 +17,12 @@ class Migration(migrations.Migration): ('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')), ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), - ('template', models.FileField(help_text='Report template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('template', models.FileField(help_text='Report template file', upload_to='report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), ('description', models.CharField(help_text='Report template description', max_length=250, verbose_name='Description')), ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Report revision number (auto-increments)', verbose_name='Revision')), ('filename_pattern', models.CharField(default='report.pdf', help_text='Pattern for generating report filenames', max_length=100, verbose_name='Filename Pattern')), ('enabled', models.BooleanField(default=True, help_text='Report template is enabled', verbose_name='Enabled')), - ('filters', models.CharField(blank=True, help_text='stock location query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.models.validate_stock_location_report_filters], verbose_name='Filters')), + ('filters', models.CharField(blank=True, help_text='stock location query filters (comma-separated list of key=value pairs)', max_length=250, verbose_name='Filters')), ], options={ 'abstract': False, diff --git a/src/backend/InvenTree/report/migrations/0022_reporttemplate.py b/src/backend/InvenTree/report/migrations/0022_reporttemplate.py new file mode 100644 index 0000000000..c0c4c01b3f --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0022_reporttemplate.py @@ -0,0 +1,40 @@ +# Generated by Django 4.2.11 on 2024-04-21 03:11 + +import InvenTree.models +import django.core.validators +from django.db import migrations, models +import report.helpers +import report.models +import report.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0021_auto_20231009_0144'), + ] + + operations = [ + migrations.CreateModel( + name='ReportTemplate', + 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')), + ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), + ('template', models.FileField(help_text='Template file', upload_to='report/report', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('description', models.CharField(help_text='Template description', max_length=250, verbose_name='Description')), + ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Revision number (auto-increments)', verbose_name='Revision')), + ('page_size', models.CharField(default=report.helpers.report_page_size_default, help_text='Page size for PDF reports', max_length=20, verbose_name='Page Size')), + ('landscape', models.BooleanField(default=False, help_text='Render report in landscape orientation', verbose_name='Landscape')), + ('filename_pattern', models.CharField(default='output.pdf', help_text='Pattern for generating filenames', max_length=100, verbose_name='Filename Pattern')), + ('enabled', models.BooleanField(default=True, help_text='Template is enabled', verbose_name='Enabled')), + ('model_type', models.CharField(max_length=100, help_text='Target model type for template', validators=[report.validators.validate_report_model_type])), + ('filters', models.CharField(blank=True, help_text='Template query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.validators.validate_filters], verbose_name='Filters')), + ], + options={ + 'abstract': False, + 'unique_together': [('name', 'model_type')] + }, + bases=(InvenTree.models.PluginValidationMixin, models.Model), + ), + ] diff --git a/src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py b/src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py new file mode 100644 index 0000000000..4326acaa04 --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0023_auto_20240421_0455.py @@ -0,0 +1,106 @@ +# Generated by Django 4.2.11 on 2024-04-21 04:55 + +import os + +from django.db import migrations +from django.core.files.base import ContentFile + + +def report_model_map(): + """Return a map of model_type: report_type keys.""" + + return { + 'stockitem': 'testreport', + 'stocklocation': 'stocklocationreport', + 'build': 'buildreport', + 'part': 'billofmaterialsreport', + 'purchaseorder': 'purchaseorderreport', + 'salesorder': 'salesorderreport', + 'returnorder': 'returnorderreport' + } + + +def forward(apps, schema_editor): + """Run forwards migration. + + - Create a new ReportTemplate instance for each existing report + """ + + # New 'generic' report template model + ReportTemplate = apps.get_model('report', 'reporttemplate') + + count = 0 + + for model_type, report_model in report_model_map().items(): + + model = apps.get_model('report', report_model) + + for template in model.objects.all(): + # Construct a new ReportTemplate instance + + filename = template.template.path + + if not os.path.exists(filename): + print(f"Migration error: Template file '{filename}' does not exist") + continue + + if '/report/inventree/' in filename: + # Do not migrate internal report templates + continue + + filename = os.path.basename(filename) + filedata = template.template.open('r').read() + + name = template.name + offset = 1 + + # Prevent duplicate names during migration + while ReportTemplate.objects.filter(name=name, model_type=model_type).exists(): + name = template.name + f"_{offset}" + offset += 1 + + ReportTemplate.objects.create( + name=name, + template=ContentFile(filedata, filename), + model_type=model_type, + description=template.description, + revision=template.revision, + filters=template.filters, + filename_pattern=template.filename_pattern, + enabled=template.enabled, + page_size=template.page_size, + landscape=template.landscape, + ) + + count += 1 + + if count > 0: + print(f"Migrated {count} report templates to new ReportTemplate model.") + + +def reverse(apps, schema_editor): + """Run reverse migration. + + - Delete any ReportTemplate instances in the database + """ + ReportTemplate = apps.get_model('report', 'reporttemplate') + + n = ReportTemplate.objects.count() + + if n > 0: + for item in ReportTemplate.objects.all(): + item.template.delete() + item.delete() + + print(f"Deleted {n} ReportTemplate objects and templates") + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0022_reporttemplate'), + ] + + operations = [ + migrations.RunPython(forward, reverse_code=reverse) + ] diff --git a/src/backend/InvenTree/report/migrations/0024_delete_billofmaterialsreport_delete_buildreport_and_more.py b/src/backend/InvenTree/report/migrations/0024_delete_billofmaterialsreport_delete_buildreport_and_more.py new file mode 100644 index 0000000000..429a8c2a78 --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0024_delete_billofmaterialsreport_delete_buildreport_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 4.2.11 on 2024-04-21 14:03 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0023_auto_20240421_0455'), + ] + + operations = [ + migrations.DeleteModel( + name='BillOfMaterialsReport', + ), + migrations.DeleteModel( + name='BuildReport', + ), + migrations.DeleteModel( + name='PurchaseOrderReport', + ), + migrations.DeleteModel( + name='ReturnOrderReport', + ), + migrations.DeleteModel( + name='SalesOrderReport', + ), + migrations.DeleteModel( + name='StockLocationReport', + ), + migrations.DeleteModel( + name='TestReport', + ), + ] diff --git a/src/backend/InvenTree/report/migrations/0025_labeltemplate.py b/src/backend/InvenTree/report/migrations/0025_labeltemplate.py new file mode 100644 index 0000000000..4ce2babc9f --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0025_labeltemplate.py @@ -0,0 +1,39 @@ +# Generated by Django 4.2.11 on 2024-04-22 12:48 + +import InvenTree.models +import django.core.validators +from django.db import migrations, models +import report.models +import report.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ('report', '0024_delete_billofmaterialsreport_delete_buildreport_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='LabelTemplate', + 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')), + ('name', models.CharField(help_text='Template name', max_length=100, verbose_name='Name')), + ('description', models.CharField(help_text='Template description', max_length=250, verbose_name='Description')), + ('template', models.FileField(help_text='Template file', upload_to='report/label', validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template')), + ('revision', models.PositiveIntegerField(default=1, editable=False, help_text='Revision number (auto-increments)', verbose_name='Revision')), + ('filename_pattern', models.CharField(default='output.pdf', help_text='Pattern for generating filenames', max_length=100, verbose_name='Filename Pattern')), + ('enabled', models.BooleanField(default=True, help_text='Template is enabled', verbose_name='Enabled')), + ('model_type', models.CharField(max_length=100, validators=[report.validators.validate_report_model_type])), + ('filters', models.CharField(blank=True, help_text='Template query filters (comma-separated list of key=value pairs)', max_length=250, validators=[report.validators.validate_filters], verbose_name='Filters')), + ('width', models.FloatField(default=50, help_text='Label width, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Width [mm]')), + ('height', models.FloatField(default=20, help_text='Label height, specified in mm', validators=[django.core.validators.MinValueValidator(2)], verbose_name='Height [mm]')), + ], + options={ + 'abstract': False, + 'unique_together': {('name', 'model_type')}, + }, + bases=(InvenTree.models.PluginValidationMixin, models.Model), + ), + ] diff --git a/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py b/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py new file mode 100644 index 0000000000..838a0ae552 --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0026_auto_20240422_1301.py @@ -0,0 +1,139 @@ +# Generated by Django 4.2.11 on 2024-04-22 13:01 + +import os + +from django.db import connection, migrations +from django.core.files.base import ContentFile +from django.core.files.storage import default_storage + +import InvenTree.ready + + +def label_model_map(): + """Map legacy label template models to model_type values.""" + + return { + "stockitemlabel": "stockitem", + "stocklocationlabel": "stocklocation", + "partlabel": "part", + "buildlinelabel": "buildline", + } + + +def convert_legacy_labels(table_name, model_name, template_model): + """Map labels from an existing table to a new model type + + Arguments: + table_name: The name of the existing table + model_name: The name of the new model type + template_model: The model class for the new template model + + Note: We use raw SQL queries here, as the original 'label' app has been removed entirely. + """ + count = 0 + + fields = [ + 'name', 'description', 'label', 'enabled', 'height', 'width', 'filename_pattern', 'filters' + ] + + fieldnames = ', '.join(fields) + + query = f"SELECT {fieldnames} FROM {table_name};" + + with connection.cursor() as cursor: + try: + cursor.execute(query) + except Exception: + # Table likely does not exist + if not InvenTree.ready.isInTestMode(): + print(f"Legacy label table {table_name} not found - skipping migration") + return 0 + + rows = cursor.fetchall() + + for row in rows: + data = { + fields[idx]: row[idx] for idx in range(len(fields)) + } + + # Skip any "builtin" labels + if 'label/inventree/' in data['label']: + continue + + print(f"Creating new LabelTemplate for {model_name} - {data['name']}") + + if template_model.objects.filter(name=data['name'], model_type=model_name).exists(): + print(f"LabelTemplate {data['name']} already exists for {model_name} - skipping") + continue + + + if not default_storage.exists(data['label']): + print(f"Label template file {data['label']} does not exist - skipping") + continue + + # Create a new template file object + filedata = default_storage.open(data['label']).read() + filename = os.path.basename(data['label']) + + # Remove the 'label' key from the data dictionary + data.pop('label') + + data['template'] = ContentFile(filedata, filename) + data['model_type'] = model_name + + template_model.objects.create(**data) + + count += 1 + + return count + + +def forward(apps, schema_editor): + """Run forwards migrations. + + - Create a new LabelTemplate instance for each existing legacy label template. + """ + + LabelTemplate = apps.get_model('report', 'labeltemplate') + + count = 0 + + for template_class, model_type in label_model_map().items(): + + table_name = f'label_{template_class}' + + count += convert_legacy_labels(table_name, model_type, LabelTemplate) or 0 + + if count > 0: + print(f"Migrated {count} report templates to new LabelTemplate model.") + +def reverse(apps, schema_editor): + """Run reverse migrations. + + - Delete any LabelTemplate instances in the database + """ + + LabelTemplate = apps.get_model('report', 'labeltemplate') + + n = LabelTemplate.objects.count() + + if n > 0: + for item in LabelTemplate.objects.all(): + + item.template.delete() + item.delete() + + print(f"Deleted {n} LabelTemplate objects and templates") + +class Migration(migrations.Migration): + + atomic = False + + dependencies = [ + ('report', '0025_labeltemplate'), + ] + + operations = [ + migrations.RunPython(forward, reverse_code=reverse) + ] + diff --git a/src/backend/InvenTree/report/migrations/0027_alter_labeltemplate_model_type_and_more.py b/src/backend/InvenTree/report/migrations/0027_alter_labeltemplate_model_type_and_more.py new file mode 100644 index 0000000000..4fa5b23aff --- /dev/null +++ b/src/backend/InvenTree/report/migrations/0027_alter_labeltemplate_model_type_and_more.py @@ -0,0 +1,77 @@ +# Generated by Django 4.2.11 on 2024-04-30 09:50 + +from django.conf import settings +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion +import report.models +import report.validators + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('report', '0026_auto_20240422_1301'), + ] + + operations = [ + migrations.AlterField( + model_name='labeltemplate', + name='model_type', + field=models.CharField(help_text='Target model type for template', max_length=100, validators=[report.validators.validate_report_model_type]), + ), + migrations.AlterField( + model_name='labeltemplate', + name='template', + field=models.FileField(help_text='Template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), + ), + migrations.AlterField( + model_name='reportasset', + name='asset', + field=models.FileField(help_text='Report asset file', upload_to=report.models.rename_template, verbose_name='Asset'), + ), + migrations.AlterField( + model_name='reportsnippet', + name='snippet', + field=models.FileField(help_text='Report snippet file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Snippet'), + ), + migrations.AlterField( + model_name='reporttemplate', + name='template', + field=models.FileField(help_text='Template file', upload_to=report.models.rename_template, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['html', 'htm'])], verbose_name='Template'), + ), + migrations.CreateModel( + name='ReportOutput', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateField(auto_now_add=True)), + ('items', models.PositiveIntegerField(default=0, help_text='Number of items to process', verbose_name='Items')), + ('complete', models.BooleanField(default=False, help_text='Report generation is complete', verbose_name='Complete')), + ('progress', models.PositiveIntegerField(default=0, help_text='Report generation progress', verbose_name='Progress')), + ('output', models.FileField(blank=True, help_text='Generated output file', null=True, upload_to='report/output', verbose_name='Output File')), + ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='report.reporttemplate', verbose_name='Report Template')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='LabelOutput', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', models.DateField(auto_now_add=True)), + ('items', models.PositiveIntegerField(default=0, help_text='Number of items to process', verbose_name='Items')), + ('complete', models.BooleanField(default=False, help_text='Report generation is complete', verbose_name='Complete')), + ('progress', models.PositiveIntegerField(default=0, help_text='Report generation progress', verbose_name='Progress')), + ('output', models.FileField(blank=True, help_text='Generated output file', null=True, upload_to='label/output', verbose_name='Output File')), + ('plugin', models.CharField(blank=True, help_text='Label output plugin', max_length=100, verbose_name='Plugin')), + ('template', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='report.labeltemplate', verbose_name='Label Template')), + ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/src/backend/InvenTree/report/mixins.py b/src/backend/InvenTree/report/mixins.py new file mode 100644 index 0000000000..12142dc162 --- /dev/null +++ b/src/backend/InvenTree/report/mixins.py @@ -0,0 +1,23 @@ +"""Report mixin classes.""" + +from django.db import models + + +class InvenTreeReportMixin(models.Model): + """A mixin class for adding report generation functionality to a model class. + + In addition to exposing the model to the report generation interface, + this mixin provides a hook for providing extra context information to the reports. + """ + + class Meta: + """Metaclass options for this mixin.""" + + abstract = True + + def report_context(self) -> dict: + """Generate a dict of context data to provide to the reporting framework. + + The default implementation returns an empty dict object. + """ + return {} diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 6575b494cb..05584b5588 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -1,30 +1,26 @@ """Report template model definitions.""" -import datetime import logging import os import sys from django.conf import settings -from django.core.cache import cache +from django.contrib.auth.models import User from django.core.exceptions import ValidationError -from django.core.validators import FileExtensionValidator +from django.core.files.storage import default_storage +from django.core.validators import FileExtensionValidator, MinValueValidator from django.db import models from django.template import Context, Template from django.template.loader import render_to_string from django.urls import reverse from django.utils.translation import gettext_lazy as _ -import build.models import common.models import InvenTree.exceptions import InvenTree.helpers import InvenTree.models -import order.models -import part.models import report.helpers -import stock.models -from InvenTree.helpers import validateFilterString +import report.validators from InvenTree.helpers_model import get_base_url from InvenTree.models import MetadataMixin from plugin.registry import registry @@ -33,6 +29,7 @@ try: from django_weasyprint import WeasyTemplateResponseMixin except OSError as err: # pragma: no cover print(f'OSError: {err}') + print("Unable to import 'django_weasyprint' module.") print('You may require some further system packages to be installed.') sys.exit(1) @@ -40,70 +37,248 @@ except OSError as err: # pragma: no cover logger = logging.getLogger('inventree') -def rename_template(instance, filename): - """Helper function for 'renaming' uploaded report files. - - Pass responsibility back to the calling class, - to ensure that files are uploaded to the correct directory. - """ - return instance.rename_file(filename) - - -def validate_stock_item_report_filters(filters): - """Validate filter string against StockItem model.""" - return validateFilterString(filters, model=stock.models.StockItem) - - -def validate_part_report_filters(filters): - """Validate filter string against Part model.""" - return validateFilterString(filters, model=part.models.Part) - - -def validate_build_report_filters(filters): - """Validate filter string against Build model.""" - return validateFilterString(filters, model=build.models.Build) - - -def validate_purchase_order_filters(filters): - """Validate filter string against PurchaseOrder model.""" - return validateFilterString(filters, model=order.models.PurchaseOrder) - - -def validate_sales_order_filters(filters): - """Validate filter string against SalesOrder model.""" - return validateFilterString(filters, model=order.models.SalesOrder) - - -def validate_return_order_filters(filters): - """Validate filter string against ReturnOrder model.""" - return validateFilterString(filters, model=order.models.ReturnOrder) - - -def validate_stock_location_report_filters(filters): - """Validate filter string against StockLocation model.""" - return validateFilterString(filters, model=stock.models.StockLocation) - - -class WeasyprintReportMixin(WeasyTemplateResponseMixin): +class WeasyprintReport(WeasyTemplateResponseMixin): """Class for rendering a HTML template to a PDF.""" - pdf_filename = 'report.pdf' - pdf_attachment = True - def __init__(self, request, template, **kwargs): """Initialize the report mixin with some standard attributes.""" self.request = request self.template_name = template - self.pdf_filename = kwargs.get('filename', 'report.pdf') + self.pdf_filename = kwargs.get('filename', 'output.pdf') -class ReportBase(InvenTree.models.InvenTreeModel): - """Base class for uploading html templates.""" +def rename_template(instance, filename): + """Function to rename a report template once uploaded. + + - Retains the original uploaded filename + - Checks for duplicate filenames across instance class + """ + path = instance.get_upload_path(filename) + + # Throw error if any other model instances reference this path + instance.check_existing_file(path, raise_error=True) + + # Delete file with this name if it already exists + if default_storage.exists(path): + logger.info(f'Deleting existing template file: {path}') + default_storage.delete(path) + + return path + + +class TemplateUploadMixin: + """Mixin class for providing template pathing functions. + + - Provides generic method for determining the upload path for a template + - Provides generic method for checking for duplicate filenames + + Classes which inherit this mixin can guarantee that uploaded templates are unique, + and that the same filename will be retained when uploaded. + """ + + # Directory in which to store uploaded templates + SUBDIR = '' + + # Name of the template field + TEMPLATE_FIELD = 'template' + + def __str__(self) -> str: + """String representation of a TemplateUploadMixin instance.""" + return str(os.path.basename(self.template_name)) + + @property + def template_name(self): + """Return the filename of the template associated with this model class.""" + template = getattr(self, self.TEMPLATE_FIELD).name + template = template.replace('/', os.path.sep) + template = template.replace('\\', os.path.sep) + + template = settings.MEDIA_ROOT.joinpath(template) + + return str(template) + + @property + def extension(self): + """Return the filename extension of the associated template file.""" + return os.path.splitext(self.template.name)[1].lower() + + def get_upload_path(self, filename): + """Generate an upload path for the given filename.""" + fn = os.path.basename(filename) + return os.path.join('report', self.SUBDIR, fn) + + def check_existing_file(self, path, raise_error=False): + """Check if a file already exists with the given filename.""" + filters = {self.TEMPLATE_FIELD: self.get_upload_path(path)} + + exists = self.__class__.objects.filter(**filters).exclude(pk=self.pk).exists() + + if exists and raise_error: + raise ValidationError({ + self.TEMPLATE_FIELD: _('Template file with this name already exists') + }) + + return exists + + def validate_unique(self, exclude=None): + """Validate that this template is unique.""" + proposed_path = self.get_upload_path(self.template_name) + self.check_existing_file(proposed_path, raise_error=True) + return super().validate_unique(exclude) + + +class ReportTemplateBase(MetadataMixin, InvenTree.models.InvenTreeModel): + """Base class for reports, labels.""" class Meta: - """Metaclass options. Abstract ensures no database table is created.""" + """Metaclass options.""" abstract = True + unique_together = ('name', 'model_type') + + def save(self, *args, **kwargs): + """Perform additional actions when the report is saved.""" + # Increment revision number + self.revision += 1 + + super().save() + + name = models.CharField( + blank=False, + max_length=100, + verbose_name=_('Name'), + help_text=_('Template name'), + ) + + description = models.CharField( + max_length=250, + verbose_name=_('Description'), + help_text=_('Template description'), + ) + + revision = models.PositiveIntegerField( + default=1, + verbose_name=_('Revision'), + help_text=_('Revision number (auto-increments)'), + editable=False, + ) + + def generate_filename(self, context, **kwargs): + """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, **kwargs): + """Render the report to a HTML string. + + Useful for debug mode (viewing generated code) + """ + context = self.get_context(instance, request, **kwargs) + + return render_to_string(self.template_name, context, request) + + def render(self, instance, request=None, **kwargs): + """Render the template to a PDF file. + + Uses django-weasyprint plugin to render HTML template against Weasyprint + """ + context = self.get_context(instance, request) + + # Render HTML template to PDF + wp = WeasyprintReport( + request, + self.template_name, + base_url=request.build_absolute_uri('/'), + presentational_hints=True, + filename=self.generate_filename(context), + **kwargs, + ) + + return wp.render_to_response(context, **kwargs) + + filename_pattern = models.CharField( + default='output.pdf', + verbose_name=_('Filename Pattern'), + help_text=_('Pattern for generating filenames'), + max_length=100, + ) + + enabled = models.BooleanField( + default=True, verbose_name=_('Enabled'), help_text=_('Template is enabled') + ) + + model_type = models.CharField( + max_length=100, + validators=[report.validators.validate_report_model_type], + help_text=_('Target model type for template'), + ) + + def clean(self): + """Clean model instance, and ensure validity.""" + super().clean() + + model = self.get_model() + filters = self.filters + + if model and filters: + report.validators.validate_filters(filters, model=model) + + def get_model(self): + """Return the database model class associated with this report template.""" + return report.helpers.report_model_from_name(self.model_type) + + filters = models.CharField( + blank=True, + max_length=250, + verbose_name=_('Filters'), + help_text=_('Template query filters (comma-separated list of key=value pairs)'), + validators=[report.validators.validate_filters], + ) + + def get_filters(self): + """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): + """Return base context data (available to all templates).""" + return { + 'base_url': get_base_url(request=request), + '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, + } + + def get_context(self, instance, request=None, **kwargs): + """Supply context data to the generic template for rendering. + + Arguments: + instance: The model instance we are printing against + request: The request object (optional) + """ + # Provide base context information to all templates + base_context = self.base_context(request=request) + + # Add in an context information provided by the model instance itself + context = {**base_context, **instance.report_context()} + + return context + + +class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): + """Class representing the ReportTemplate database model.""" + + SUBDIR = 'report' + TEMPLATE_FIELD = 'template' + + @staticmethod + def get_api_url(): + """Return the API endpoint for the ReportTemplate model.""" + return reverse('api-report-template-list') def __init__(self, *args, **kwargs): """Initialize the particular report instance.""" @@ -113,90 +288,13 @@ class ReportBase(InvenTree.models.InvenTreeModel): 'page_size' ).choices = report.helpers.report_page_size_options() - def save(self, *args, **kwargs): - """Perform additional actions when the report is saved.""" - # Increment revision number - self.revision += 1 - - super().save() - - def __str__(self): - """Format a string representation of a report instance.""" - return f'{self.name} - {self.description}' - - @classmethod - def getSubdir(cls): - """Return the subdirectory where template files for this report model will be located.""" - return '' - - def rename_file(self, filename): - """Function for renaming uploaded file.""" - filename = os.path.basename(filename) - - path = os.path.join('report', 'report_template', self.getSubdir(), filename) - - fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() - - # If the report file is the *same* filename as the one being uploaded, - # remove the original one from the media directory - if str(filename) == str(self.template): - if fullpath.exists(): - logger.info("Deleting existing report template: '%s'", filename) - os.remove(fullpath) - - # Ensure that the cache is cleared for this template! - cache.delete(fullpath) - - return path - - @property - def extension(self): - """Return the filename extension of the associated template file.""" - return os.path.splitext(self.template.name)[1].lower() - - @property - def template_name(self): - """Returns the file system path to the template file. - - Required for passing the file to an external process - """ - template = self.template.name - - # TODO @matmair change to using new file objects - template = template.replace('/', os.path.sep) - template = template.replace('\\', os.path.sep) - - template = settings.MEDIA_ROOT.joinpath(template) - - return template - - name = models.CharField( - blank=False, - max_length=100, - verbose_name=_('Name'), - help_text=_('Template name'), - ) - template = models.FileField( upload_to=rename_template, verbose_name=_('Template'), - help_text=_('Report template file'), + help_text=_('Template file'), validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], ) - description = models.CharField( - max_length=250, - verbose_name=_('Description'), - help_text=_('Report template description'), - ) - - revision = models.PositiveIntegerField( - default=1, - verbose_name=_('Revision'), - help_text=_('Report revision number (auto-increments)'), - editable=False, - ) - page_size = models.CharField( max_length=20, default=report.helpers.report_page_size_default, @@ -210,25 +308,6 @@ class ReportBase(InvenTree.models.InvenTreeModel): help_text=_('Render report in landscape orientation'), ) - -class ReportTemplateBase(MetadataMixin, ReportBase): - """Reporting template model. - - Able to be passed context data - """ - - class Meta: - """Metaclass options. Abstract ensures no database table is created.""" - - abstract = True - - # Pass a single top-level object to the report template - object_to_print = None - - def get_context_data(self, request): - """Supply context data to the template for rendering.""" - return {} - def get_report_size(self): """Return the printable page size for this report.""" try: @@ -245,29 +324,18 @@ class ReportTemplateBase(MetadataMixin, ReportBase): return page_size - def context(self, request): - """All context to be passed to the renderer.""" - # Generate custom context data based on the particular report subclass - context = self.get_context_data(request) + def get_context(self, instance, request=None, **kwargs): + """Supply context data to the report template for rendering.""" + context = { + **super().get_context(instance, request), + 'page_size': self.get_report_size(), + 'landscape': self.landscape, + } - context['base_url'] = get_base_url(request=request) - context['date'] = InvenTree.helpers.current_date() - context['datetime'] = InvenTree.helpers.current_time() - context['page_size'] = self.get_report_size() - context['report_template'] = self - context['report_description'] = self.description - context['report_name'] = self.name - context['report_revision'] = self.revision - context['request'] = request - context['user'] = request.user - - # Pass the context through to any active reporting plugins - plugins = registry.with_mixin('report') - - for plugin in plugins: - # Let each plugin add its own context data + # Pass the context through to the plugin registry for any additional information + for plugin in registry.with_mixin('report'): try: - plugin.add_report_context(self, self.object_to_print, request, context) + plugin.add_report_context(self, instance, request, context) except Exception: InvenTree.exceptions.log_error( f'plugins.{plugin.slug}.add_report_context' @@ -275,376 +343,162 @@ class ReportTemplateBase(MetadataMixin, ReportBase): return context - def generate_filename(self, request, **kwargs): - """Generate a filename for this report.""" - template_string = Template(self.filename_pattern) - ctx = self.context(request) +class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): + """Class representing the LabelTemplate database model.""" - context = Context(ctx) - - return template_string.render(context) - - def render_as_string(self, request, **kwargs): - """Render the report to a HTML string. - - Useful for debug mode (viewing generated code) - """ - return render_to_string(self.template_name, self.context(request), request) - - def render(self, request, **kwargs): - """Render the template to a PDF file. - - Uses django-weasyprint plugin to render HTML template against Weasyprint - """ - # TODO: Support custom filename generation! - # filename = kwargs.get('filename', 'report.pdf') - - # Render HTML template to PDF - wp = WeasyprintReportMixin( - request, - self.template_name, - base_url=request.build_absolute_uri('/'), - presentational_hints=True, - filename=self.generate_filename(request), - **kwargs, - ) - - return wp.render_to_response(self.context(request), **kwargs) - - filename_pattern = models.CharField( - default='report.pdf', - verbose_name=_('Filename Pattern'), - help_text=_('Pattern for generating report filenames'), - max_length=100, - ) - - enabled = models.BooleanField( - default=True, - verbose_name=_('Enabled'), - help_text=_('Report template is enabled'), - ) - - -class TestReport(ReportTemplateBase): - """Render a TestReport against a StockItem object.""" + SUBDIR = 'label' + TEMPLATE_FIELD = 'template' @staticmethod def get_api_url(): - """Return the API URL associated with the TestReport model.""" - return reverse('api-stockitem-testreport-list') + """Return the API endpoint for the LabelTemplate model.""" + return reverse('api-label-template-list') - @classmethod - def getSubdir(cls): - """Return the subdirectory where TestReport templates are located.""" - return 'test' - - filters = models.CharField( - blank=True, - max_length=250, - verbose_name=_('Filters'), - help_text=_( - 'StockItem query filters (comma-separated list of key=value pairs)' - ), - validators=[validate_stock_item_report_filters], + template = models.FileField( + upload_to=rename_template, + verbose_name=_('Template'), + help_text=_('Template file'), + validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], ) - include_installed = models.BooleanField( + width = models.FloatField( + default=50, + verbose_name=_('Width [mm]'), + help_text=_('Label width, specified in mm'), + validators=[MinValueValidator(2)], + ) + + height = models.FloatField( + default=20, + verbose_name=_('Height [mm]'), + help_text=_('Label height, specified in mm'), + validators=[MinValueValidator(2)], + ) + + def generate_page_style(self, **kwargs): + """Generate @page style for the label template. + + This is inserted at the top of the style block for a given label + """ + width = kwargs.get('width', self.width) + height = kwargs.get('height', self.height) + margin = kwargs.get('margin', 0) + + return f""" + @page {{ + size: {width}mm {height}mm; + margin: {margin}mm; + }} + """ + + def get_context(self, instance, request=None, **kwargs): + """Supply context data to the label template for rendering.""" + context = { + **super().get_context(instance, request, **kwargs), + 'width': self.width, + 'height': self.height, + } + + if kwargs.pop('insert_page_style', True): + context['page_style'] = self.generate_page_style() + + # Pass the context through to any registered plugins + plugins = registry.with_mixin('report') + + for plugin in plugins: + # Let each plugin add its own context data + plugin.add_label_context(self, self.object_to_print, request, context) + + return context + + +class TemplateOutput(models.Model): + """Base class representing a generated file from a template. + + As reports (or labels) may take a long time to render, + this process is offloaded to the background worker process. + + The result is either a file made available for download, + or a message indicating that the output is handled externally. + """ + + class Meta: + """Metaclass options.""" + + abstract = True + + created = models.DateField(auto_now_add=True, editable=False) + + user = models.ForeignKey( + User, on_delete=models.SET_NULL, blank=True, null=True, related_name='+' + ) + + items = models.PositiveIntegerField( + default=0, verbose_name=_('Items'), help_text=_('Number of items to process') + ) + + complete = models.BooleanField( default=False, - verbose_name=_('Include Installed Tests'), - help_text=_( - 'Include test results for stock items installed inside assembled item' - ), + verbose_name=_('Complete'), + help_text=_('Report generation is complete'), ) - def get_test_keys(self, stock_item): - """Construct a flattened list of test 'keys' for this StockItem. - - The list is constructed as follows: - - First, any 'required' tests - - Second, any 'non required' tests - - Finally, any test results which do not match a test - """ - keys = [] - - for test in stock_item.part.getTestTemplates(required=True): - if test.key not in keys: - keys.append(test.key) - - for test in stock_item.part.getTestTemplates(required=False): - if test.key not in keys: - keys.append(test.key) - - for result in stock_item.testResultList( - include_installed=self.include_installed - ): - if result.key not in keys: - keys.append(result.key) - - return list(keys) - - def get_context_data(self, request): - """Return custom context data for the TestReport template.""" - stock_item = self.object_to_print - - return { - 'stock_item': stock_item, - 'serial': stock_item.serial, - 'part': stock_item.part, - 'parameters': stock_item.part.parameters_map(), - 'test_keys': self.get_test_keys(stock_item), - 'test_template_list': stock_item.part.getTestTemplates(), - 'test_template_map': stock_item.part.getTestTemplateMap(), - 'results': stock_item.testResultMap( - include_installed=self.include_installed - ), - 'result_list': stock_item.testResultList( - include_installed=self.include_installed - ), - 'installed_items': stock_item.get_installed_items(cascade=True), - } + progress = models.PositiveIntegerField( + default=0, verbose_name=_('Progress'), help_text=_('Report generation progress') + ) -class BuildReport(ReportTemplateBase): - """Build order / work order report.""" +class ReportOutput(TemplateOutput): + """Class representing a generated report output file.""" - @staticmethod - def get_api_url(): - """Return the API URL associated with the BuildReport model.""" - return reverse('api-build-report-list') + template = models.ForeignKey( + ReportTemplate, on_delete=models.CASCADE, verbose_name=_('Report Template') + ) - @classmethod - def getSubdir(cls): - """Return the subdirectory where BuildReport templates are located.""" - return 'build' - - filters = models.CharField( + output = models.FileField( + upload_to='report/output', blank=True, - max_length=250, - verbose_name=_('Build Filters'), - help_text=_('Build query filters (comma-separated list of key=value pairs'), - validators=[validate_build_report_filters], + null=True, + verbose_name=_('Output File'), + help_text=_('Generated output file'), ) - def get_context_data(self, request): - """Custom context data for the build report.""" - my_build = self.object_to_print - if not isinstance(my_build, build.models.Build): - raise TypeError('Provided model is not a Build object') +class LabelOutput(TemplateOutput): + """Class representing a generated label output file.""" - return { - 'build': my_build, - 'part': my_build.part, - 'build_outputs': my_build.build_outputs.all(), - 'line_items': my_build.build_lines.all(), - 'bom_items': my_build.part.get_bom_items(), - 'reference': my_build.reference, - 'quantity': my_build.quantity, - 'title': str(my_build), - } - - -class BillOfMaterialsReport(ReportTemplateBase): - """Render a Bill of Materials against a Part object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the BillOfMaterialsReport model.""" - return reverse('api-bom-report-list') - - @classmethod - def getSubdir(cls): - """Return the directory where BillOfMaterialsReport templates are located.""" - return 'bom' - - filters = models.CharField( + plugin = models.CharField( + max_length=100, blank=True, - max_length=250, - verbose_name=_('Part Filters'), - help_text=_('Part query filters (comma-separated list of key=value pairs'), - validators=[validate_part_report_filters], + verbose_name=_('Plugin'), + help_text=_('Label output plugin'), ) - def get_context_data(self, request): - """Return custom context data for the BillOfMaterialsReport template.""" - part = self.object_to_print + template = models.ForeignKey( + LabelTemplate, on_delete=models.CASCADE, verbose_name=_('Label Template') + ) - return { - 'part': part, - 'category': part.category, - 'bom_items': part.get_bom_items(), - } - - -class PurchaseOrderReport(ReportTemplateBase): - """Render a report against a PurchaseOrder object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the PurchaseOrderReport model.""" - return reverse('api-po-report-list') - - @classmethod - def getSubdir(cls): - """Return the directory where PurchaseOrderReport templates are stored.""" - return 'purchaseorder' - - filters = models.CharField( + output = models.FileField( + upload_to='label/output', blank=True, - max_length=250, - verbose_name=_('Filters'), - help_text=_('Purchase order query filters'), - validators=[validate_purchase_order_filters], + null=True, + verbose_name=_('Output File'), + help_text=_('Generated output file'), ) - def get_context_data(self, request): - """Return custom context data for the PurchaseOrderReport template.""" - order = self.object_to_print - return { - 'description': order.description, - 'lines': order.lines, - 'extra_lines': order.extra_lines, - 'order': order, - 'reference': order.reference, - 'supplier': order.supplier, - 'title': str(order), - } - - -class SalesOrderReport(ReportTemplateBase): - """Render a report against a SalesOrder object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the SalesOrderReport model.""" - return reverse('api-so-report-list') - - @classmethod - def getSubdir(cls): - """Return the subdirectory where SalesOrderReport templates are located.""" - return 'salesorder' - - filters = models.CharField( - blank=True, - max_length=250, - verbose_name=_('Filters'), - help_text=_('Sales order query filters'), - validators=[validate_sales_order_filters], - ) - - def get_context_data(self, request): - """Return custom context data for a SalesOrderReport template.""" - order = self.object_to_print - - return { - 'customer': order.customer, - 'description': order.description, - 'lines': order.lines, - 'extra_lines': order.extra_lines, - 'order': order, - 'reference': order.reference, - 'title': str(order), - } - - -class ReturnOrderReport(ReportTemplateBase): - """Render a custom report against a ReturnOrder object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the ReturnOrderReport model.""" - return reverse('api-return-order-report-list') - - @classmethod - def getSubdir(cls): - """Return the directory where the ReturnOrderReport templates are stored.""" - return 'returnorder' - - filters = models.CharField( - blank=True, - max_length=250, - verbose_name=_('Filters'), - help_text=_('Return order query filters'), - validators=[validate_return_order_filters], - ) - - def get_context_data(self, request): - """Return custom context data for the ReturnOrderReport template.""" - order = self.object_to_print - - return { - 'order': order, - 'description': order.description, - 'reference': order.reference, - 'customer': order.customer, - 'lines': order.lines, - 'extra_lines': order.extra_lines, - 'title': str(order), - } - - -def rename_snippet(instance, filename): - """Function to rename a report snippet once uploaded.""" - path = ReportSnippet.snippet_path(filename) - fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() - - # If the snippet file is the *same* filename as the one being uploaded, - # delete the original one from the media directory - if str(filename) == str(instance.snippet): - if fullpath.exists(): - logger.info("Deleting existing snippet file: '%s'", filename) - os.remove(fullpath) - - # Ensure that the cache is deleted for this snippet - cache.delete(fullpath) - - return path - - -class ReportSnippet(models.Model): +class ReportSnippet(TemplateUploadMixin, models.Model): """Report template 'snippet' which can be used to make templates that can then be included in other reports. Useful for 'common' template actions, sub-templates, etc """ - def __str__(self) -> str: - """String representation of a ReportSnippet instance.""" - return f'snippets/{self.filename}' - - @property - def filename(self): - """Return the filename of the asset.""" - path = self.snippet.name - if path: - return os.path.basename(path) - else: - return '-' - - @staticmethod - def snippet_path(filename): - """Return the fully-qualified snippet path for the given filename.""" - return os.path.join('report', 'snippets', os.path.basename(str(filename))) - - def validate_unique(self, exclude=None): - """Validate that this report asset is unique.""" - proposed_path = self.snippet_path(self.snippet) - - if ( - ReportSnippet.objects.filter(snippet=proposed_path) - .exclude(pk=self.pk) - .count() - > 0 - ): - raise ValidationError({ - 'snippet': _('Snippet file with this name already exists') - }) - - return super().validate_unique(exclude) + SUBDIR = 'snippets' + TEMPLATE_FIELD = 'snippet' snippet = models.FileField( - upload_to=rename_snippet, + upload_to=rename_template, verbose_name=_('Snippet'), help_text=_('Report snippet file'), validators=[FileExtensionValidator(allowed_extensions=['html', 'htm'])], @@ -657,26 +511,7 @@ class ReportSnippet(models.Model): ) -def rename_asset(instance, filename): - """Function to rename an asset file when uploaded.""" - path = ReportAsset.asset_path(filename) - fullpath = settings.MEDIA_ROOT.joinpath(path).resolve() - - # If the asset file is the *same* filename as the one being uploaded, - # delete the original one from the media directory - if str(filename) == str(instance.asset): - if fullpath.exists(): - # Check for existing asset file with the same name - logger.info("Deleting existing asset file: '%s'", filename) - os.remove(fullpath) - - # Ensure the cache is deleted for this asset - cache.delete(fullpath) - - return path - - -class ReportAsset(models.Model): +class ReportAsset(TemplateUploadMixin, models.Model): """Asset file for use in report templates. For example, an image to use in a header file. @@ -684,41 +519,12 @@ class ReportAsset(models.Model): and can be loaded in a template using the {% report_asset %} tag. """ - def __str__(self): - """String representation of a ReportAsset instance.""" - return f'assets/{self.filename}' - - @property - def filename(self): - """Return the filename of the asset.""" - path = self.asset.name - if path: - return os.path.basename(path) - else: - return '-' - - @staticmethod - def asset_path(filename): - """Return the fully-qualified asset path for the given filename.""" - return os.path.join('report', 'assets', os.path.basename(str(filename))) - - def validate_unique(self, exclude=None): - """Validate that this report asset is unique.""" - proposed_path = self.asset_path(self.asset) - - if ( - ReportAsset.objects.filter(asset=proposed_path).exclude(pk=self.pk).count() - > 0 - ): - raise ValidationError({ - 'asset': _('Asset file with this name already exists') - }) - - return super().validate_unique(exclude) + SUBDIR = 'assets' + TEMPLATE_FIELD = 'asset' # Asset file asset = models.FileField( - upload_to=rename_asset, + upload_to=rename_template, verbose_name=_('Asset'), help_text=_('Report asset file'), ) @@ -729,42 +535,3 @@ class ReportAsset(models.Model): verbose_name=_('Description'), help_text=_('Asset file description'), ) - - -class StockLocationReport(ReportTemplateBase): - """Render a StockLocationReport against a StockLocation object.""" - - @staticmethod - def get_api_url(): - """Return the API URL associated with the StockLocationReport model.""" - return reverse('api-stocklocation-report-list') - - @classmethod - def getSubdir(cls): - """Return the subdirectory where StockLocationReport templates are located.""" - return 'slr' - - filters = models.CharField( - blank=True, - max_length=250, - verbose_name=_('Filters'), - help_text=_( - 'stock location query filters (comma-separated list of key=value pairs)' - ), - validators=[validate_stock_location_report_filters], - ) - - def get_context_data(self, request): - """Return custom context data for the StockLocationReport template.""" - stock_location = self.object_to_print - - if not isinstance(stock_location, stock.models.StockLocation): - raise TypeError( - 'Provided model is not a StockLocation object -> ' - + str(type(stock_location)) - ) - - return { - 'stock_location': stock_location, - 'stock_items': stock_location.get_stock_items(), - } diff --git a/src/backend/InvenTree/report/serializers.py b/src/backend/InvenTree/report/serializers.py index 320c489a37..1dadc7114f 100644 --- a/src/backend/InvenTree/report/serializers.py +++ b/src/backend/InvenTree/report/serializers.py @@ -1,102 +1,208 @@ """API serializers for the reporting models.""" +from django.utils.translation import gettext_lazy as _ + from rest_framework import serializers +import plugin.models +import plugin.serializers +import report.helpers import report.models from InvenTree.serializers import ( InvenTreeAttachmentSerializerField, InvenTreeModelSerializer, + UserSerializer, ) class ReportSerializerBase(InvenTreeModelSerializer): - """Base class for report serializer.""" + """Base serializer class for report and label templates.""" - template = InvenTreeAttachmentSerializerField(required=True) + def __init__(self, *args, **kwargs): + """Override the constructor for the ReportSerializerBase. + + The primary goal here is to ensure that the 'choices' attribute + is set correctly for the 'model_type' field. + """ + super().__init__(*args, **kwargs) + + if len(self.fields['model_type'].choices) == 0: + self.fields['model_type'].choices = report.helpers.report_model_options() @staticmethod - def report_fields(): - """Generic serializer fields for a report template.""" + def base_fields(): + """Base serializer field set.""" return [ 'pk', 'name', 'description', + 'model_type', 'template', 'filters', - 'page_size', - 'landscape', + 'filename_pattern', 'enabled', + 'revision', ] + template = InvenTreeAttachmentSerializerField(required=True) -class TestReportSerializer(ReportSerializerBase): - """Serializer class for the TestReport model.""" + revision = serializers.IntegerField(read_only=True) + + # Note: The choices are overridden at run-time + model_type = serializers.ChoiceField( + label=_('Model Type'), + choices=report.helpers.report_model_options(), + required=True, + allow_blank=False, + allow_null=False, + ) + + +class ReportTemplateSerializer(ReportSerializerBase): + """Serializer class for report template model.""" class Meta: """Metaclass options.""" - model = report.models.TestReport - fields = ReportSerializerBase.report_fields() + model = report.models.ReportTemplate + fields = [*ReportSerializerBase.base_fields(), 'page_size', 'landscape'] + + page_size = serializers.ChoiceField( + required=False, + default=report.helpers.report_page_size_default(), + choices=report.helpers.report_page_size_options(), + ) -class BuildReportSerializer(ReportSerializerBase): - """Serializer class for the BuildReport model.""" +class ReportPrintSerializer(serializers.Serializer): + """Serializer class for printing a report.""" class Meta: """Metaclass options.""" - model = report.models.BuildReport - fields = ReportSerializerBase.report_fields() + fields = ['template', 'items'] + + template = serializers.PrimaryKeyRelatedField( + queryset=report.models.ReportTemplate.objects.all(), + many=False, + required=True, + allow_null=False, + label=_('Template'), + help_text=_('Select report template'), + ) + + items = serializers.ListField( + child=serializers.IntegerField(), + required=True, + allow_empty=False, + label=_('Items'), + help_text=_('List of item primary keys to include in the report'), + ) -class BOMReportSerializer(ReportSerializerBase): - """Serializer class for the BillOfMaterialsReport model.""" +class LabelPrintSerializer(serializers.Serializer): + """Serializer class for printing a label.""" + + # List of extra plugin field names + plugin_fields = [] class Meta: """Metaclass options.""" - model = report.models.BillOfMaterialsReport - fields = ReportSerializerBase.report_fields() + fields = ['template', 'items', 'plugin'] + + def __init__(self, *args, **kwargs): + """Override the constructor to add the extra plugin fields.""" + # Reset to a known state + self.Meta.fields = ['template', 'items', 'plugin'] + + if plugin_serializer := kwargs.pop('plugin_serializer', None): + for key, field in plugin_serializer.fields.items(): + self.Meta.fields.append(key) + setattr(self, key, field) + + super().__init__(*args, **kwargs) + + template = serializers.PrimaryKeyRelatedField( + queryset=report.models.LabelTemplate.objects.all(), + many=False, + required=True, + allow_null=False, + label=_('Template'), + help_text=_('Select label template'), + ) + + # Plugin field - note that we use the 'key' (not the pk) for lookup + plugin = plugin.serializers.PluginRelationSerializer( + many=False, + required=False, + allow_null=False, + label=_('Printing Plugin'), + help_text=_('Select plugin to use for label printing'), + ) + + items = serializers.ListField( + child=serializers.IntegerField(), + required=True, + allow_empty=False, + label=_('Items'), + help_text=_('List of item primary keys to include in the report'), + ) -class PurchaseOrderReportSerializer(ReportSerializerBase): - """Serializer class for the PurchaseOrdeReport model.""" +class LabelTemplateSerializer(ReportSerializerBase): + """Serializer class for label template model.""" class Meta: """Metaclass options.""" - model = report.models.PurchaseOrderReport - fields = ReportSerializerBase.report_fields() + model = report.models.LabelTemplate + fields = [*ReportSerializerBase.base_fields(), 'width', 'height'] -class SalesOrderReportSerializer(ReportSerializerBase): - """Serializer class for the SalesOrderReport model.""" +class BaseOutputSerializer(InvenTreeModelSerializer): + """Base serializer class for template output.""" + + @staticmethod + def base_fields(): + """Basic field set.""" + return [ + 'pk', + 'created', + 'user', + 'user_detail', + 'model_type', + 'items', + 'complete', + 'progress', + 'output', + 'template', + ] + + output = InvenTreeAttachmentSerializerField() + model_type = serializers.CharField(source='template.model_type', read_only=True) + + user_detail = UserSerializer(source='user', read_only=True, many=False) + + +class LabelOutputSerializer(BaseOutputSerializer): + """Serializer class for the LabelOutput model.""" class Meta: """Metaclass options.""" - model = report.models.SalesOrderReport - fields = ReportSerializerBase.report_fields() + model = report.models.LabelOutput + fields = [*BaseOutputSerializer.base_fields(), 'plugin'] -class ReturnOrderReportSerializer(ReportSerializerBase): - """Serializer class for the ReturnOrderReport model.""" +class ReportOutputSerializer(BaseOutputSerializer): + """Serializer class for the ReportOutput model.""" class Meta: """Metaclass options.""" - model = report.models.ReturnOrderReport - fields = ReportSerializerBase.report_fields() - - -class StockLocationReportSerializer(ReportSerializerBase): - """Serializer class for the StockLocationReport model.""" - - class Meta: - """Metaclass options.""" - - model = report.models.StockLocationReport - fields = ReportSerializerBase.report_fields() + model = report.models.ReportOutput + fields = BaseOutputSerializer.base_fields() class ReportSnippetSerializer(InvenTreeModelSerializer): diff --git a/src/backend/InvenTree/report/tasks.py b/src/backend/InvenTree/report/tasks.py new file mode 100644 index 0000000000..606cd71304 --- /dev/null +++ b/src/backend/InvenTree/report/tasks.py @@ -0,0 +1,17 @@ +"""Background tasks for the report app.""" + +from datetime import timedelta + +from InvenTree.helpers import current_time +from InvenTree.tasks import ScheduledTask, scheduled_task +from report.models import LabelOutput, ReportOutput + + +@scheduled_task(ScheduledTask.DAILY) +def cleanup_old_report_outputs(): + """Remove old report/label outputs from the database.""" + # Remove any outputs which are older than 5 days + threshold = current_time() - timedelta(days=5) + + LabelOutput.objects.filter(created__lte=threshold).delete() + ReportOutput.objects.filter(created__lte=threshold).delete() diff --git a/src/backend/InvenTree/label/templates/label/buildline/buildline_label_base.html b/src/backend/InvenTree/report/templates/label/buildline_label.html similarity index 100% rename from src/backend/InvenTree/label/templates/label/buildline/buildline_label_base.html rename to src/backend/InvenTree/report/templates/label/buildline_label.html diff --git a/src/backend/InvenTree/label/templates/label/label_base.html b/src/backend/InvenTree/report/templates/label/label_base.html similarity index 100% rename from src/backend/InvenTree/label/templates/label/label_base.html rename to src/backend/InvenTree/report/templates/label/label_base.html diff --git a/src/backend/InvenTree/label/templates/label/part/part_label.html b/src/backend/InvenTree/report/templates/label/part_label.html similarity index 100% rename from src/backend/InvenTree/label/templates/label/part/part_label.html rename to src/backend/InvenTree/report/templates/label/part_label.html diff --git a/src/backend/InvenTree/label/templates/label/part/part_label_code128.html b/src/backend/InvenTree/report/templates/label/part_label_code128.html similarity index 100% rename from src/backend/InvenTree/label/templates/label/part/part_label_code128.html rename to src/backend/InvenTree/report/templates/label/part_label_code128.html diff --git a/src/backend/InvenTree/label/templates/label/stockitem/qr.html b/src/backend/InvenTree/report/templates/label/stockitem_qr.html similarity index 100% rename from src/backend/InvenTree/label/templates/label/stockitem/qr.html rename to src/backend/InvenTree/report/templates/label/stockitem_qr.html diff --git a/src/backend/InvenTree/label/templates/label/stocklocation/qr.html b/src/backend/InvenTree/report/templates/label/stocklocation_qr.html similarity index 100% rename from src/backend/InvenTree/label/templates/label/stocklocation/qr.html rename to src/backend/InvenTree/report/templates/label/stocklocation_qr.html diff --git a/src/backend/InvenTree/label/templates/label/stocklocation/qr_and_text.html b/src/backend/InvenTree/report/templates/label/stocklocation_qr_and_text.html similarity index 100% rename from src/backend/InvenTree/label/templates/label/stocklocation/qr_and_text.html rename to src/backend/InvenTree/report/templates/label/stocklocation_qr_and_text.html diff --git a/src/backend/InvenTree/report/templates/report/inventree_build_order.html b/src/backend/InvenTree/report/templates/report/inventree_build_order.html deleted file mode 100644 index 72e52a889a..0000000000 --- a/src/backend/InvenTree/report/templates/report/inventree_build_order.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "report/inventree_build_order_base.html" %} - - diff --git a/src/backend/InvenTree/report/templates/report/inventree_build_order_base.html b/src/backend/InvenTree/report/templates/report/inventree_build_order_report.html similarity index 100% rename from src/backend/InvenTree/report/templates/report/inventree_build_order_base.html rename to src/backend/InvenTree/report/templates/report/inventree_build_order_report.html diff --git a/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html b/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html index 6f936681dc..f099b8425d 100644 --- a/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html +++ b/src/backend/InvenTree/report/templates/report/inventree_order_report_base.html @@ -12,7 +12,7 @@ margin-top: 4cm; {% endblock page_margin %} {% block bottom_left %} -content: "v{{ report_revision }} - {% format_date date %}"; +content: "v{{ template_revision }} - {% format_date date %}"; {% endblock bottom_left %} {% block bottom_center %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_po_report.html b/src/backend/InvenTree/report/templates/report/inventree_po_report.html deleted file mode 100644 index 184ea896e1..0000000000 --- a/src/backend/InvenTree/report/templates/report/inventree_po_report.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "report/inventree_po_report_base.html" %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_po_report_base.html b/src/backend/InvenTree/report/templates/report/inventree_purchase_order_report.html similarity index 100% rename from src/backend/InvenTree/report/templates/report/inventree_po_report_base.html rename to src/backend/InvenTree/report/templates/report/inventree_purchase_order_report.html diff --git a/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html b/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html index cece937a0e..0dbc062e71 100644 --- a/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html +++ b/src/backend/InvenTree/report/templates/report/inventree_return_order_report.html @@ -1 +1,62 @@ -{% extends "report/inventree_return_order_report_base.html" %} +{% extends "report/inventree_order_report_base.html" %} + +{% load i18n %} +{% load report %} +{% load barcode %} +{% load inventree_extras %} +{% load markdownify %} + +{% block header_content %} + + +
+

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

+ {% if customer %}{{ customer.name }}{% endif %} +
+{% endblock header_content %} + +{% block page_content %} +

{% trans "Line Items" %}

+ + + + + + + + + + + + {% for line in lines.all %} + + + + + + + {% endfor %} + + {% if extra_lines %} + + {% for line in extra_lines.all %} + + + + + + + {% endfor %} + {% endif %} + + +
{% trans "Part" %}{% trans "Serial Number" %}{% trans "Reference" %}{% trans "Note" %}
+
+ {% trans "Image" %} +
+
+ {{ line.item.part.full_name }} +
+
{{ line.item.serial }}{{ line.reference }}{{ line.notes }}
{% trans "Extra Line Items" %}
{{ line.reference }}{{ line.notes }}
+ +{% endblock page_content %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_return_order_report_base.html b/src/backend/InvenTree/report/templates/report/inventree_return_order_report_base.html deleted file mode 100644 index 0dbc062e71..0000000000 --- a/src/backend/InvenTree/report/templates/report/inventree_return_order_report_base.html +++ /dev/null @@ -1,62 +0,0 @@ -{% extends "report/inventree_order_report_base.html" %} - -{% load i18n %} -{% load report %} -{% load barcode %} -{% load inventree_extras %} -{% load markdownify %} - -{% block header_content %} - - -
-

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

- {% if customer %}{{ customer.name }}{% endif %} -
-{% endblock header_content %} - -{% block page_content %} -

{% trans "Line Items" %}

- - - - - - - - - - - - {% for line in lines.all %} - - - - - - - {% endfor %} - - {% if extra_lines %} - - {% for line in extra_lines.all %} - - - - - - - {% endfor %} - {% endif %} - - -
{% trans "Part" %}{% trans "Serial Number" %}{% trans "Reference" %}{% trans "Note" %}
-
- {% trans "Image" %} -
-
- {{ line.item.part.full_name }} -
-
{{ line.item.serial }}{{ line.reference }}{{ line.notes }}
{% trans "Extra Line Items" %}
{{ line.reference }}{{ line.notes }}
- -{% endblock page_content %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_so_report_base.html b/src/backend/InvenTree/report/templates/report/inventree_sales_order_report.html similarity index 100% rename from src/backend/InvenTree/report/templates/report/inventree_so_report_base.html rename to src/backend/InvenTree/report/templates/report/inventree_sales_order_report.html diff --git a/src/backend/InvenTree/report/templates/report/inventree_so_report.html b/src/backend/InvenTree/report/templates/report/inventree_so_report.html deleted file mode 100644 index dbb4543bf3..0000000000 --- a/src/backend/InvenTree/report/templates/report/inventree_so_report.html +++ /dev/null @@ -1 +0,0 @@ -{% extends "report/inventree_so_report_base.html" %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_slr_report.html b/src/backend/InvenTree/report/templates/report/inventree_stock_location_report.html similarity index 100% rename from src/backend/InvenTree/report/templates/report/inventree_slr_report.html rename to src/backend/InvenTree/report/templates/report/inventree_stock_location_report.html diff --git a/src/backend/InvenTree/report/templates/report/inventree_test_report.html b/src/backend/InvenTree/report/templates/report/inventree_test_report.html index 4607494f8f..4e25b4598f 100644 --- a/src/backend/InvenTree/report/templates/report/inventree_test_report.html +++ b/src/backend/InvenTree/report/templates/report/inventree_test_report.html @@ -1,3 +1,184 @@ -{% extends "report/inventree_test_report_base.html" %} +{% extends "report/inventree_report_base.html" %} - +{% load i18n %} +{% load report %} +{% load inventree_extras %} + +{% block style %} +.test-table { + width: 100%; +} + +{% block bottom_left %} +content: "{% format_date date %}"; +{% endblock bottom_left %} + +{% block bottom_center %} +content: "{% inventree_version shortstring=True %}"; +{% endblock bottom_center %} + +{% block top_center %} +content: "{% trans 'Stock Item Test Report' %}"; +{% endblock top_center %} + +.test-row { + padding: 3px; +} + +.test-pass { + color: #5f5; +} + +.test-fail { + color: #F55; +} + +.test-not-found { + color: #33A; +} + +.required-test-not-found { + color: #EEE; + background-color: #F55; +} + +.container { + padding: 5px; + border: 1px solid; +} + +.text-left { + display: inline-block; + width: 50%; +} + +.img-right { + display: inline; + align-content: right; + align-items: right; + width: 50%; +} + +.part-img { + height: 4cm; +} + +{% endblock style %} + +{% block pre_page_content %} + +{% endblock pre_page_content %} + +{% block page_content %} + +
+
+

+ {{ part.full_name }} +

+

{{ part.description }}

+

{{ stock_item.location }}

+

Stock Item ID: {{ stock_item.pk }}

+
+
+ {% trans "Part image" %} +
+

+ {% if stock_item.is_serialized %} + {% trans "Serial Number" %}: {{ stock_item.serial }} + {% else %} + {% trans "Quantity" %}: {% decimal stock_item.quantity %} + {% endif %} +

+
+
+ +{% if test_keys|length > 0 %} +

{% trans "Test Results" %}

+ + + + + + + + + + + + + + + + {% for key in test_keys %} + + {% getkey test_template_map key as test_template %} + {% getkey results key as test_result %} + + + {% if test_result %} + {% if test_result.result %} + + {% else %} + + {% endif %} + + + + {% else %} + {% if test_template.required %} + + {% else %} + + {% endif %} + {% endif %} + + {% endfor %} + + +
{% trans "Test" %}{% trans "Result" %}{% trans "Value" %}{% trans "User" %}{% trans "Date" %}

+ {% if test_template %} + {% render_html_text test_template.test_name bold=test_template.required %} + {% elif test_result %} + {% render_html_text test_result.test italic=True %} + {% else %} + + {{ key }} + {% endif %} + {% trans "Pass" %}{% trans "Fail" %}{{ test_result.value }}{{ test_result.user.username }}{% format_date test_result.date.date %}{% trans "No result (required)" %}{% trans "No result" %}
+{% else %} +No tests defined for this stock item +{% endif %} + +{% if installed_items|length > 0 %} +

{% trans "Installed Items" %}

+ + + + + + {% for sub_item in installed_items %} + + + + + {% endfor %} + +
+ {% trans "Part image" %} + {{ sub_item.part.full_name }} + + {% if sub_item.serialized %} + {% trans "Serial" %}: {{ sub_item.serial }} + {% else %} + {% trans "Quantity" %}: {% decimal sub_item.quantity %} + {% endif %} +
+ +{% endif %} + +{% endblock page_content %} + +{% block post_page_content %} + +{% endblock post_page_content %} diff --git a/src/backend/InvenTree/report/templates/report/inventree_test_report_base.html b/src/backend/InvenTree/report/templates/report/inventree_test_report_base.html deleted file mode 100644 index 4e25b4598f..0000000000 --- a/src/backend/InvenTree/report/templates/report/inventree_test_report_base.html +++ /dev/null @@ -1,184 +0,0 @@ -{% extends "report/inventree_report_base.html" %} - -{% load i18n %} -{% load report %} -{% load inventree_extras %} - -{% block style %} -.test-table { - width: 100%; -} - -{% block bottom_left %} -content: "{% format_date date %}"; -{% endblock bottom_left %} - -{% block bottom_center %} -content: "{% inventree_version shortstring=True %}"; -{% endblock bottom_center %} - -{% block top_center %} -content: "{% trans 'Stock Item Test Report' %}"; -{% endblock top_center %} - -.test-row { - padding: 3px; -} - -.test-pass { - color: #5f5; -} - -.test-fail { - color: #F55; -} - -.test-not-found { - color: #33A; -} - -.required-test-not-found { - color: #EEE; - background-color: #F55; -} - -.container { - padding: 5px; - border: 1px solid; -} - -.text-left { - display: inline-block; - width: 50%; -} - -.img-right { - display: inline; - align-content: right; - align-items: right; - width: 50%; -} - -.part-img { - height: 4cm; -} - -{% endblock style %} - -{% block pre_page_content %} - -{% endblock pre_page_content %} - -{% block page_content %} - -
-
-

- {{ part.full_name }} -

-

{{ part.description }}

-

{{ stock_item.location }}

-

Stock Item ID: {{ stock_item.pk }}

-
-
- {% trans "Part image" %} -
-

- {% if stock_item.is_serialized %} - {% trans "Serial Number" %}: {{ stock_item.serial }} - {% else %} - {% trans "Quantity" %}: {% decimal stock_item.quantity %} - {% endif %} -

-
-
- -{% if test_keys|length > 0 %} -

{% trans "Test Results" %}

- - - - - - - - - - - - - - - - {% for key in test_keys %} - - {% getkey test_template_map key as test_template %} - {% getkey results key as test_result %} - - - {% if test_result %} - {% if test_result.result %} - - {% else %} - - {% endif %} - - - - {% else %} - {% if test_template.required %} - - {% else %} - - {% endif %} - {% endif %} - - {% endfor %} - - -
{% trans "Test" %}{% trans "Result" %}{% trans "Value" %}{% trans "User" %}{% trans "Date" %}

- {% if test_template %} - {% render_html_text test_template.test_name bold=test_template.required %} - {% elif test_result %} - {% render_html_text test_result.test italic=True %} - {% else %} - - {{ key }} - {% endif %} - {% trans "Pass" %}{% trans "Fail" %}{{ test_result.value }}{{ test_result.user.username }}{% format_date test_result.date.date %}{% trans "No result (required)" %}{% trans "No result" %}
-{% else %} -No tests defined for this stock item -{% endif %} - -{% if installed_items|length > 0 %} -

{% trans "Installed Items" %}

- - - - - - {% for sub_item in installed_items %} - - - - - {% endfor %} - -
- {% trans "Part image" %} - {{ sub_item.part.full_name }} - - {% if sub_item.serialized %} - {% trans "Serial" %}: {{ sub_item.serial }} - {% else %} - {% trans "Quantity" %}: {% decimal sub_item.quantity %} - {% endif %} -
- -{% endif %} - -{% endblock page_content %} - -{% block post_page_content %} - -{% endblock post_page_content %} diff --git a/src/backend/InvenTree/report/tests.py b/src/backend/InvenTree/report/tests.py index e44d19b467..bf30286f15 100644 --- a/src/backend/InvenTree/report/tests.py +++ b/src/backend/InvenTree/report/tests.py @@ -1,12 +1,10 @@ """Unit testing for the various report models.""" -import os -import shutil from io import StringIO +from django.apps import apps from django.conf import settings from django.core.cache import cache -from django.http.response import StreamingHttpResponse from django.test import TestCase, override_settings from django.urls import reverse from django.utils import timezone @@ -17,9 +15,11 @@ from PIL import Image import report.models as report_models from build.models import Build -from common.models import InvenTreeSetting, InvenTreeUserSetting -from InvenTree.files import MEDIA_STORAGE_DIR, TEMPLATES_DIR +from common.models import InvenTreeSetting from InvenTree.unit_test import InvenTreeAPITestCase +from order.models import ReturnOrder, SalesOrder +from plugin.registry import registry +from report.models import LabelTemplate, ReportTemplate from report.templatetags import barcode as barcode_tags from report.templatetags import report as report_tags from stock.models import StockItem, StockItemAttachment @@ -194,19 +194,19 @@ class BarcodeTagTest(TestCase): """Test the barcode generation tag.""" barcode = barcode_tags.barcode('12345') - self.assertTrue(isinstance(barcode, str)) + self.assertIsInstance(barcode, str) self.assertTrue(barcode.startswith('data:image/png;')) # Try with a different format barcode = barcode_tags.barcode('99999', format='BMP') - self.assertTrue(isinstance(barcode, str)) + self.assertIsInstance(barcode, str) self.assertTrue(barcode.startswith('data:image/bmp;')) def test_qrcode(self): """Test the qrcode generation tag.""" # Test with default settings qrcode = barcode_tags.qrcode('hello world') - self.assertTrue(isinstance(qrcode, str)) + self.assertIsInstance(qrcode, str) self.assertTrue(qrcode.startswith('data:image/png;')) self.assertEqual(len(qrcode), 700) @@ -214,7 +214,7 @@ class BarcodeTagTest(TestCase): qrcode = barcode_tags.qrcode( 'hello_world', version=2, box_size=50, format='BMP' ) - self.assertTrue(isinstance(qrcode, str)) + self.assertIsInstance(qrcode, str) self.assertTrue(qrcode.startswith('data:image/bmp;')) self.assertEqual(len(qrcode), 309720) @@ -233,64 +233,29 @@ class ReportTest(InvenTreeAPITestCase): 'stock_tests', 'bom', 'build', + 'order', + 'return_order', + 'sales_order', ] superuser = True - model = None - list_url = None - detail_url = None - print_url = None - def setUp(self): """Ensure cache is cleared as part of test setup.""" cache.clear() + + apps.get_app_config('report').create_default_reports() + return super().setUp() - def copyReportTemplate(self, filename, description): - """Copy the provided report template into the required media directory.""" - src_dir = TEMPLATES_DIR.joinpath('report', 'templates', 'report') - template_dir = os.path.join('report', 'inventree', self.model.getSubdir()) - dst_dir = MEDIA_STORAGE_DIR.joinpath(template_dir) - - if not dst_dir.exists(): # pragma: no cover - dst_dir.mkdir(parents=True, exist_ok=True) - - src_file = src_dir.joinpath(filename) - dst_file = dst_dir.joinpath(filename) - - if not dst_file.exists(): # pragma: no cover - shutil.copyfile(src_file, dst_file) - - # Convert to an "internal" filename - db_filename = os.path.join(template_dir, filename) - - # Create a database entry for this report template! - self.model.objects.create( - name=os.path.splitext(filename)[0], - description=description, - template=db_filename, - enabled=True, - ) - - def test_api_url(self): - """Test returned API Url against URL tag defined in this file.""" - if not self.list_url: - return - - self.assertEqual(reverse(self.list_url), self.model.get_api_url()) - def test_list_endpoint(self): """Test that the LIST endpoint works for each report.""" - if not self.list_url: - return - - url = reverse(self.list_url) + url = reverse('api-report-template-list') response = self.get(url) self.assertEqual(response.status_code, 200) - reports = self.model.objects.all() + reports = ReportTemplate.objects.all() n = len(reports) # API endpoint must return correct number of reports @@ -317,10 +282,7 @@ class ReportTest(InvenTreeAPITestCase): def test_create_endpoint(self): """Test that creating a new report works for each report.""" - if not self.list_url: - return - - url = reverse(self.list_url) + url = reverse('api-report-template-list') # Create a new report # Django REST API "APITestCase" does not work like requests - to send a file without it existing on disk, @@ -330,16 +292,23 @@ class ReportTest(InvenTreeAPITestCase): ) filestr.name = 'ExampleTemplate.html' - response = self.post( - url, - data={ - 'name': 'New report', - 'description': 'A fancy new report created through API test', - 'template': filestr, - }, - format=None, - expected_code=201, - ) + data = { + 'name': 'New report', + 'description': 'A fancy new report created through API test', + 'template': filestr, + 'model_type': 'part2', + } + + # Test with invalid model type + response = self.post(url, data=data, expected_code=400) + + self.assertIn('"part2" is not a valid choice', str(response.data['model_type'])) + + # With valid model type + data['model_type'] = 'part' + filestr.seek(0) + + response = self.post(url, data=data, format=None, expected_code=201) # Make sure the expected keys are in the response self.assertIn('pk', response.data) @@ -357,10 +326,7 @@ class ReportTest(InvenTreeAPITestCase): def test_detail_endpoint(self): """Test that the DETAIL endpoint works for each report.""" - if not self.detail_url: - return - - reports = self.model.objects.all() + reports = ReportTemplate.objects.all() n = len(reports) @@ -369,7 +335,8 @@ class ReportTest(InvenTreeAPITestCase): # Check detail page for first report response = self.get( - reverse(self.detail_url, kwargs={'pk': reports[0].pk}), expected_code=200 + reverse('api-report-template-detail', kwargs={'pk': reports[0].pk}), + expected_code=200, ) # Make sure the expected keys are in the response @@ -387,7 +354,7 @@ class ReportTest(InvenTreeAPITestCase): # Check PATCH method response = self.patch( - reverse(self.detail_url, kwargs={'pk': reports[0].pk}), + reverse('api-report-template-detail', kwargs={'pk': reports[0].pk}), { 'name': 'Changed name during test', 'description': 'New version of the template', @@ -414,218 +381,199 @@ class ReportTest(InvenTreeAPITestCase): # Delete the last report response = self.delete( - reverse(self.detail_url, kwargs={'pk': reports[n - 1].pk}), + reverse('api-report-template-detail', kwargs={'pk': reports[n - 1].pk}), expected_code=204, ) def test_metadata(self): """Unit tests for the metadata field.""" - if self.model is not None: - p = self.model.objects.first() + p = ReportTemplate.objects.first() - self.assertEqual(p.metadata, {}) + self.assertEqual(p.metadata, {}) - self.assertIsNone(p.get_metadata('test')) - self.assertEqual(p.get_metadata('test', backup_value=123), 123) + self.assertIsNone(p.get_metadata('test')) + self.assertEqual(p.get_metadata('test', backup_value=123), 123) - # Test update via the set_metadata() method - p.set_metadata('test', 3) - self.assertEqual(p.get_metadata('test'), 3) + # Test update via the set_metadata() method + p.set_metadata('test', 3) + self.assertEqual(p.get_metadata('test'), 3) - for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: - p.set_metadata(k, k) + for k in ['apple', 'banana', 'carrot', 'carrot', 'banana']: + p.set_metadata(k, k) - self.assertEqual(len(p.metadata.keys()), 4) + self.assertEqual(len(p.metadata.keys()), 4) + + def test_report_template_permissions(self): + """Test that the user permissions are correctly applied. + + - For all /api/report/ endpoints, any authenticated user should have full read access + - Write access is limited to staff users + - Non authenticated users should have no access at all + """ + # First test the "report list" endpoint + url = reverse('api-report-template-list') + + template = ReportTemplate.objects.first() + + detail_url = reverse('api-report-template-detail', kwargs={'pk': template.pk}) + + # Non-authenticated user should have no access + self.logout() + + self.get(url, expected_code=401) + + # Authenticated user should have read access + self.user.is_staff = False + self.user.save() + + self.login() + + # Check read access to template list URL + self.get(url, expected_code=200) + + # Check read access to template detail URL + self.get(detail_url, expected_code=200) + + # An update to the report template should fail + self.patch( + detail_url, + data={'description': 'Some new description here?'}, + expected_code=403, + ) + + # Now, test with a staff user + self.logout() + + self.user.is_staff = True + self.user.save() + + self.login() + + self.patch( + detail_url, + data={'description': 'An updated description'}, + expected_code=200, + ) + + template.refresh_from_db() + self.assertEqual(template.description, 'An updated description') -class TestReportTest(ReportTest): +class PrintTestMixins: + """Mixin that enables e2e printing tests.""" + + plugin_ref = 'samplelabelprinter' + + def do_activate_plugin(self): + """Activate the 'samplelabel' plugin.""" + config = registry.get_plugin(self.plugin_ref).plugin_config() + config.active = True + config.save() + + def run_print_test(self, qs, model_type, label: bool = True): + """Run tests on single and multiple page printing. + + Args: + qs: class of the base queryset + model_type: the model type of the queryset + label: whether the model is a label or report + """ + mdl = LabelTemplate if label else ReportTemplate + url = reverse('api-label-print' if label else 'api-report-print') + + qs = qs.objects.all() + template = mdl.objects.filter(enabled=True, model_type=model_type).first() + plugin = registry.get_plugin(self.plugin_ref) + + # Single page printing + self.post( + url, + {'template': template.pk, 'plugin': plugin.pk, 'items': [qs[0].pk]}, + expected_code=201, + ) + + # Multi page printing + self.post( + url, + { + 'template': template.pk, + 'plugin': plugin.pk, + 'items': [item.pk for item in qs], + }, + expected_code=201, + max_query_time=15, + max_query_count=1000, # TODO: Should look into this + ) + + +class TestReportTest(PrintTestMixins, ReportTest): """Unit testing class for the stock item TestReport model.""" - model = report_models.TestReport + model = report_models.ReportTemplate - list_url = 'api-stockitem-testreport-list' - detail_url = 'api-stockitem-testreport-detail' - print_url = 'api-stockitem-testreport-print' + list_url = 'api-report-template-list' + detail_url = 'api-report-template-detail' + print_url = 'api-report-print' def setUp(self): """Setup function for the stock item TestReport.""" - self.copyReportTemplate('inventree_test_report.html', 'stock item test report') + apps.get_app_config('report').create_default_reports() + self.do_activate_plugin() return super().setUp() def test_print(self): """Printing tests for the TestReport.""" - report = self.model.objects.first() + template = ReportTemplate.objects.filter( + enabled=True, model_type='stockitem' + ).first() + self.assertIsNotNone(template) - url = reverse(self.print_url, kwargs={'pk': report.pk}) + url = reverse(self.print_url) # Try to print without providing a valid StockItem - response = self.get(url, expected_code=400) + self.post(url, {'template': template.pk}, expected_code=400) # Try to print with an invalid StockItem - response = self.get(url, {'item': 9999}, expected_code=400) + self.post(url, {'template': template.pk, 'items': [9999]}, expected_code=400) # Now print with a valid StockItem item = StockItem.objects.first() - response = self.get(url, {'item': item.pk}, expected_code=200) + response = self.post( + url, {'template': template.pk, 'items': [item.pk]}, expected_code=201 + ) - # Response should be a StreamingHttpResponse (PDF file) - self.assertEqual(type(response), StreamingHttpResponse) - - headers = response.headers - self.assertEqual(headers['Content-Type'], 'application/pdf') + # There should be a link to the generated PDF + self.assertEqual(response.data['output'].startswith('/media/report/'), True) # By default, this should *not* have created an attachment against this stockitem self.assertFalse(StockItemAttachment.objects.filter(stock_item=item).exists()) + return + # TODO @matmair - Re-add this test after https://github.com/inventree/InvenTree/pull/7074/files#r1600694356 is resolved # Change the setting, now the test report should be attached automatically InvenTreeSetting.set_setting('REPORT_ATTACH_TEST_REPORT', True, None) - response = self.get(url, {'item': item.pk}, expected_code=200) + response = self.post( + url, {'template': report.pk, 'items': [item.pk]}, expected_code=201 + ) - headers = response.headers - self.assertEqual(headers['Content-Type'], 'application/pdf') + # There should be a link to the generated PDF + self.assertEqual(response.data['output'].startswith('/media/report/'), True) # Check that a report has been uploaded attachment = StockItemAttachment.objects.filter(stock_item=item).first() self.assertIsNotNone(attachment) + def test_mdl_build(self): + """Test the Build model.""" + self.run_print_test(Build, 'build', label=False) -class BuildReportTest(ReportTest): - """Unit test class for the BuildReport model.""" + def test_mdl_returnorder(self): + """Test the ReturnOrder model.""" + self.run_print_test(ReturnOrder, 'returnorder', label=False) - model = report_models.BuildReport - - list_url = 'api-build-report-list' - detail_url = 'api-build-report-detail' - print_url = 'api-build-report-print' - - def setUp(self): - """Setup unit testing functions.""" - self.copyReportTemplate('inventree_build_order.html', 'build order template') - - return super().setUp() - - def test_print(self): - """Printing tests for the BuildReport.""" - report = self.model.objects.first() - - url = reverse(self.print_url, kwargs={'pk': report.pk}) - - # Try to print without providing a valid BuildOrder - response = self.get(url, expected_code=400) - - # Try to print with an invalid BuildOrder - response = self.get(url, {'build': 9999}, expected_code=400) - - # Now print with a valid BuildOrder - - build = Build.objects.first() - - response = self.get(url, {'build': build.pk}) - - self.assertEqual(type(response), StreamingHttpResponse) - - headers = response.headers - - self.assertEqual(headers['Content-Type'], 'application/pdf') - self.assertEqual( - headers['Content-Disposition'], 'attachment; filename="report.pdf"' - ) - - # Now, set the download type to be "inline" - inline = InvenTreeUserSetting.get_setting_object( - 'REPORT_INLINE', cache=False, user=self.user - ) - inline.value = True - inline.save() - - response = self.get(url, {'build': 1}) - headers = response.headers - self.assertEqual(headers['Content-Type'], 'application/pdf') - self.assertEqual( - headers['Content-Disposition'], 'inline; filename="report.pdf"' - ) - - -class BOMReportTest(ReportTest): - """Unit test class for the BillOfMaterialsReport model.""" - - model = report_models.BillOfMaterialsReport - - list_url = 'api-bom-report-list' - detail_url = 'api-bom-report-detail' - print_url = 'api-bom-report-print' - - def setUp(self): - """Setup function for the bill of materials Report.""" - self.copyReportTemplate( - 'inventree_bill_of_materials_report.html', 'bill of materials report' - ) - - return super().setUp() - - -class PurchaseOrderReportTest(ReportTest): - """Unit test class for the PurchaseOrderReport model.""" - - model = report_models.PurchaseOrderReport - - list_url = 'api-po-report-list' - detail_url = 'api-po-report-detail' - print_url = 'api-po-report-print' - - def setUp(self): - """Setup function for the purchase order Report.""" - self.copyReportTemplate('inventree_po_report.html', 'purchase order report') - - return super().setUp() - - -class SalesOrderReportTest(ReportTest): - """Unit test class for the SalesOrderReport model.""" - - model = report_models.SalesOrderReport - - list_url = 'api-so-report-list' - detail_url = 'api-so-report-detail' - print_url = 'api-so-report-print' - - def setUp(self): - """Setup function for the sales order Report.""" - self.copyReportTemplate('inventree_so_report.html', 'sales order report') - - return super().setUp() - - -class ReturnOrderReportTest(ReportTest): - """Unit tests for the ReturnOrderReport model.""" - - model = report_models.ReturnOrderReport - list_url = 'api-return-order-report-list' - detail_url = 'api-return-order-report-detail' - print_url = 'api-return-order-report-print' - - def setUp(self): - """Setup function for the ReturnOrderReport tests.""" - self.copyReportTemplate( - 'inventree_return_order_report.html', 'return order report' - ) - - return super().setUp() - - -class StockLocationReportTest(ReportTest): - """Unit tests for the StockLocationReport model.""" - - model = report_models.StockLocationReport - list_url = 'api-stocklocation-report-list' - detail_url = 'api-stocklocation-report-detail' - print_url = 'api-stocklocation-report-print' - - def setUp(self): - """Setup function for the StockLocationReport tests.""" - self.copyReportTemplate('inventree_slr_report.html', 'stock location report') - - return super().setUp() + def test_mdl_salesorder(self): + """Test the SalesOrder model.""" + self.run_print_test(SalesOrder, 'salesorder', label=False) diff --git a/src/backend/InvenTree/report/validators.py b/src/backend/InvenTree/report/validators.py new file mode 100644 index 0000000000..ad9e8e0d33 --- /dev/null +++ b/src/backend/InvenTree/report/validators.py @@ -0,0 +1,20 @@ +"""Validators for report models.""" + +from django.core.exceptions import ValidationError + +import report.helpers + + +def validate_report_model_type(value): + """Ensure that the selected model type is valid.""" + model_options = [el[0] for el in report.helpers.report_model_options()] + + if value not in model_options: + raise ValidationError('Not a valid model type') + + +def validate_filters(value, model=None): + """Validate that the provided model filters are valid.""" + from InvenTree.helpers import validateFilterString + + return validateFilterString(value, model=model) diff --git a/src/backend/InvenTree/stock/admin.py b/src/backend/InvenTree/stock/admin.py index f97c281f52..3601e992da 100644 --- a/src/backend/InvenTree/stock/admin.py +++ b/src/backend/InvenTree/stock/admin.py @@ -292,6 +292,7 @@ class StockItemAdmin(ImportExportModelAdmin): 'sales_order', 'stocktake_user', 'supplier_part', + 'consumed_by', ] diff --git a/src/backend/InvenTree/stock/api.py b/src/backend/InvenTree/stock/api.py index f2b26743bc..e78fd277a0 100644 --- a/src/backend/InvenTree/stock/api.py +++ b/src/backend/InvenTree/stock/api.py @@ -1,7 +1,8 @@ """JSON API for the Stock app.""" +import json from collections import OrderedDict -from datetime import datetime, timedelta +from datetime import timedelta from django.core.exceptions import ValidationError as DjangoValidationError from django.db import transaction @@ -13,7 +14,8 @@ from django.utils.translation import gettext_lazy as _ from django_filters import rest_framework as rest_filters from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema_field -from rest_framework import status +from rest_framework import permissions, status +from rest_framework.generics import GenericAPIView from rest_framework.response import Response from rest_framework.serializers import ValidationError @@ -33,7 +35,7 @@ from InvenTree.api import ( MetadataView, ) from InvenTree.filters import ( - ORDER_FILTER, + ORDER_FILTER_ALIAS, SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter, @@ -45,7 +47,6 @@ from InvenTree.helpers import ( is_ajax, isNull, str2bool, - str2int, ) from InvenTree.mixins import ( CreateAPI, @@ -55,7 +56,6 @@ from InvenTree.mixins import ( RetrieveAPI, RetrieveUpdateDestroyAPI, ) -from InvenTree.status_codes import StockHistoryCode, StockStatus from order.models import PurchaseOrder, ReturnOrder, SalesOrder, SalesOrderAllocation from order.serializers import ( PurchaseOrderSerializer, @@ -65,6 +65,7 @@ from order.serializers import ( from part.models import BomItem, Part, PartCategory from part.serializers import PartBriefSerializer from stock.admin import LocationResource, StockItemResource +from stock.generators import generate_batch_code, generate_serial_number from stock.models import ( StockItem, StockItemAttachment, @@ -73,6 +74,39 @@ from stock.models import ( StockLocation, StockLocationType, ) +from stock.status_codes import StockHistoryCode, StockStatus + + +class GenerateBatchCode(GenericAPIView): + """API endpoint for generating batch codes.""" + + permission_classes = [permissions.IsAuthenticated] + serializer_class = StockSerializers.GenerateBatchCodeSerializer + + def post(self, request, *args, **kwargs): + """Generate a new batch code.""" + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + data = {'batch_code': generate_batch_code(**serializer.validated_data)} + + return Response(data, status=status.HTTP_201_CREATED) + + +class GenerateSerialNumber(GenericAPIView): + """API endpoint for generating serial numbers.""" + + permission_classes = [permissions.IsAuthenticated] + serializer_class = StockSerializers.GenerateSerialNumberSerializer + + def post(self, request, *args, **kwargs): + """Generate a new serial number.""" + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + data = {'serial_number': generate_serial_number(**serializer.validated_data)} + + return Response(data, status=status.HTTP_201_CREATED) class StockDetail(RetrieveUpdateDestroyAPI): @@ -395,13 +429,15 @@ class StockLocationTree(ListAPI): queryset = StockLocation.objects.all() serializer_class = StockSerializers.LocationTreeSerializer - filter_backends = ORDER_FILTER + filter_backends = ORDER_FILTER_ALIAS ordering_fields = ['level', 'name', 'sublocations'] # Order by tree level (top levels first) and then name ordering = ['level', 'name'] + ordering_field_aliases = {'level': ['level', 'name'], 'name': ['name', 'level']} + def get_queryset(self, *args, **kwargs): """Return annotated queryset for the StockLocationTree endpoint.""" queryset = super().get_queryset(*args, **kwargs) @@ -1055,36 +1091,6 @@ class StockList(APIDownloadMixin, ListCreateDestroyAPIView): return DownloadFile(filedata, filename) - def list(self, request, *args, **kwargs): - """Override the 'list' method, as the StockLocation objects are very expensive to serialize. - - So, we fetch and serialize the required StockLocation objects only as required. - """ - queryset = self.filter_queryset(self.get_queryset()) - - page = self.paginate_queryset(queryset) - - if page is not None: - serializer = self.get_serializer(page, many=True) - else: - serializer = self.get_serializer(queryset, many=True) - - data = serializer.data - - """ - Determine the response type based on the request. - a) For HTTP requests (e.g. via the browsable API) return a DRF response - b) For AJAX requests, simply return a JSON rendered response. - - Note: b) is about 100x quicker than a), because the DRF framework adds a lot of cruft - """ - - if page is not None: - return self.get_paginated_response(data) - elif is_ajax(request): - return JsonResponse(data, safe=False) - return Response(data) - def get_queryset(self, *args, **kwargs): """Annotate queryset before returning.""" queryset = super().get_queryset(*args, **kwargs) diff --git a/src/backend/InvenTree/stock/generators.py b/src/backend/InvenTree/stock/generators.py new file mode 100644 index 0000000000..f08ec0ab05 --- /dev/null +++ b/src/backend/InvenTree/stock/generators.py @@ -0,0 +1,113 @@ +"""Generator functions for the stock app.""" + +from inspect import signature + +from django.core.exceptions import ValidationError + +from jinja2 import Template + +import common.models +import InvenTree.exceptions +import InvenTree.helpers + + +def generate_batch_code(**kwargs): + """Generate a default 'batch code' for a new StockItem. + + By default, this uses the value of the 'STOCK_BATCH_CODE_TEMPLATE' setting (if configured), + which can be passed through a simple template. + + Also, this function is exposed to the ValidationMixin plugin class, + allowing custom plugins to be used to generate new batch code values. + + Various kwargs can be passed to the function, which will be passed through to the plugin functions. + """ + # First, check if any plugins can generate batch codes + from plugin.registry import registry + + now = InvenTree.helpers.current_time() + + context = { + 'date': now, + 'year': now.year, + 'month': now.month, + 'day': now.day, + 'hour': now.hour, + 'minute': now.minute, + 'week': now.isocalendar()[1], + **kwargs, + } + + for plugin in registry.with_mixin('validation'): + generate = getattr(plugin, 'generate_batch_code', None) + + if not generate: + continue + + # Check if the function signature accepts kwargs + sig = signature(generate) + + if 'kwargs' in sig.parameters: + # Pass the kwargs through to the plugin + try: + batch = generate(**context) + except Exception: + InvenTree.exceptions.log_error('plugin.generate_batch_code') + continue + else: + # Ignore the kwargs (legacy plugin) + try: + batch = generate() + except Exception: + InvenTree.exceptions.log_error('plugin.generate_batch_code') + continue + + # Return the first non-null value generated by a plugin + if batch is not None: + return batch + + # If we get to this point, no plugin was able to generate a new batch code + batch_template = common.models.InvenTreeSetting.get_setting( + 'STOCK_BATCH_CODE_TEMPLATE', '' + ) + + return Template(batch_template).render(context) + + +def generate_serial_number(part=None, quantity=1, **kwargs) -> str: + """Generate a default 'serial number' for a new StockItem.""" + from plugin.registry import registry + + quantity = quantity or 1 + + if part is None: + # Cannot generate a serial number without a part + return None + + try: + quantity = int(quantity) + except Exception: + raise ValidationError({'quantity': 'Invalid quantity value'}) + + if quantity < 1: + raise ValidationError({'quantity': 'Quantity must be greater than zero'}) + + # If we are here, no plugins were available to generate a serial number + # In this case, we will generate a simple serial number based on the provided part + sn = part.get_latest_serial_number() + + serials = [] + + # Generate the required quantity of serial numbers + # Note that this call gets passed through to the plugin system + while quantity > 0: + sn = InvenTree.helpers.increment_serial_number(sn) + + # Exit if an empty or duplicated serial is generated + if not sn or sn in serials: + break + + serials.append(sn) + quantity -= 1 + + return ','.join(serials) diff --git a/src/backend/InvenTree/stock/migrations/0001_initial.py b/src/backend/InvenTree/stock/migrations/0001_initial.py index 09c033c06b..040a48efeb 100644 --- a/src/backend/InvenTree/stock/migrations/0001_initial.py +++ b/src/backend/InvenTree/stock/migrations/0001_initial.py @@ -35,6 +35,9 @@ class Migration(migrations.Migration): ('belongs_to', models.ForeignKey(blank=True, help_text='Is this item installed in another item?', null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='owned_parts', to='stock.StockItem')), ('customer', models.ForeignKey(blank=True, help_text='Item assigned to customer?', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='stockitems', to='company.Company')), ], + options={ + 'verbose_name': 'Stock Item', + } ), migrations.CreateModel( name='StockLocation', diff --git a/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py b/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py index 0b0d6cbc5a..a7106f8af2 100644 --- a/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py +++ b/src/backend/InvenTree/stock/migrations/0053_auto_20201110_0513.py @@ -2,7 +2,7 @@ from django.db import migrations import djmoney.models.fields -import common.settings +import common.currency class Migration(migrations.Migration): @@ -16,11 +16,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='stockitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), ), migrations.AddField( model_name='stockitem', name='purchase_price_currency', - field=djmoney.models.fields.CurrencyField(choices=common.settings.all_currency_codes(), default=common.settings.currency_code_default(), editable=False, max_length=3), + field=djmoney.models.fields.CurrencyField(choices=common.currency.all_currency_codes(), default=common.currency.currency_code_default(), editable=False, max_length=3), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py b/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py index 12ad90cc0a..8aebb0c7c1 100644 --- a/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py +++ b/src/backend/InvenTree/stock/migrations/0055_auto_20201117_1453.py @@ -2,7 +2,7 @@ from django.db import migrations import djmoney.models.fields -import common.settings +import common.currency class Migration(migrations.Migration): @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitem', name='purchase_price', - field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.settings.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), + field=djmoney.models.fields.MoneyField(blank=True, decimal_places=4, default_currency=common.currency.currency_code_default(), help_text='Single unit purchase price at time of purchase', max_digits=19, null=True, verbose_name='Purchase Price'), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py b/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py index aacaf01edc..ba44e9c1bd 100644 --- a/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py +++ b/src/backend/InvenTree/stock/migrations/0061_auto_20210511_0911.py @@ -4,7 +4,7 @@ import re from django.db import migrations -from InvenTree.status_codes import StockHistoryCode +from stock.status_codes import StockHistoryCode def update_history(apps, schema_editor): diff --git a/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py b/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py index 646e25199a..5faa8e81b3 100644 --- a/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py +++ b/src/backend/InvenTree/stock/migrations/0074_alter_stockitem_batch.py @@ -1,6 +1,7 @@ # Generated by Django 3.2.12 on 2022-04-26 10:19 from django.db import migrations, models +import stock.generators import stock.models @@ -14,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitem', name='batch', - field=models.CharField(blank=True, default=stock.models.generate_batch_code, help_text='Batch code for this stock item', max_length=100, null=True, verbose_name='Batch Code'), + field=models.CharField(blank=True, default=stock.generators.generate_batch_code, help_text='Batch code for this stock item', max_length=100, null=True, verbose_name='Batch Code'), ), ] diff --git a/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py b/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py index b2dd16cc03..e8db1c5f77 100644 --- a/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py +++ b/src/backend/InvenTree/stock/migrations/0096_auto_20230330_1121.py @@ -15,7 +15,7 @@ def update_stock_history(apps, schema_editor): - Add the appropriate history! """ - from InvenTree.status_codes import StockHistoryCode + from stock.status_codes import StockHistoryCode StockItem = apps.get_model('stock', 'stockitem') StockItemTracking = apps.get_model('stock', 'stockitemtracking') diff --git a/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py b/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py index 7b8cf4d239..90807a8c10 100644 --- a/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py +++ b/src/backend/InvenTree/stock/migrations/0102_alter_stockitem_status.py @@ -2,7 +2,7 @@ import django.core.validators from django.db import migrations, models -import InvenTree.status_codes +import stock.status_codes class Migration(migrations.Migration): @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='stockitem', name='status', - field=models.PositiveIntegerField(choices=InvenTree.status_codes.StockStatus.items(), default=10, validators=[django.core.validators.MinValueValidator(0)]), + field=models.PositiveIntegerField(choices=stock.status_codes.StockStatus.items(), default=10, validators=[django.core.validators.MinValueValidator(0)]), ), ] diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index 2d5cfaeaff..1def243c1a 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -20,7 +20,6 @@ from django.dispatch import receiver from django.urls import reverse from django.utils.translation import gettext_lazy as _ -from jinja2 import Template from mptt.managers import TreeManager from mptt.models import MPTTModel, TreeForeignKey from taggit.managers import TaggableManager @@ -31,18 +30,15 @@ import InvenTree.helpers import InvenTree.models import InvenTree.ready import InvenTree.tasks -import label.models +import report.mixins import report.models from company import models as CompanyModels from InvenTree.fields import InvenTreeModelMoneyField, InvenTreeURLField -from InvenTree.status_codes import ( - SalesOrderStatusGroups, - StockHistoryCode, - StockStatus, - StockStatusGroups, -) +from order.status_codes import SalesOrderStatusGroups from part import models as PartModels from plugin.events import trigger_event +from stock.generators import generate_batch_code +from stock.status_codes import StockHistoryCode, StockStatus, StockStatusGroups from users.models import Owner logger = logging.getLogger('inventree') @@ -107,7 +103,9 @@ class StockLocationManager(TreeManager): class StockLocation( - InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeTree + InvenTree.models.InvenTreeBarcodeMixin, + report.mixins.InvenTreeReportMixin, + InvenTree.models.InvenTreeTree, ): """Organization tree for StockItem objects. @@ -142,6 +140,16 @@ class StockLocation( """Return API url.""" return reverse('api-location-list') + def report_context(self): + """Return report context data for this StockLocation.""" + return { + 'location': self, + 'qr_data': self.format_barcode(brief=True), + 'parent': self.parent, + 'stock_location': self, + 'stock_items': self.get_stock_items(), + } + custom_icon = models.CharField( blank=True, max_length=100, @@ -295,47 +303,6 @@ class StockLocation( return self.get_stock_items(cascade=cascade) -def generate_batch_code(): - """Generate a default 'batch code' for a new StockItem. - - By default, this uses the value of the 'STOCK_BATCH_CODE_TEMPLATE' setting (if configured), - which can be passed through a simple template. - - Also, this function is exposed to the ValidationMixin plugin class, - allowing custom plugins to be used to generate new batch code values - """ - # First, check if any plugins can generate batch codes - from plugin.registry import registry - - for plugin in registry.with_mixin('validation'): - batch = plugin.generate_batch_code() - - if batch is not None: - # Return the first non-null value generated by a plugin - return batch - - # If we get to this point, no plugin was able to generate a new batch code - batch_template = common.models.InvenTreeSetting.get_setting( - 'STOCK_BATCH_CODE_TEMPLATE', '' - ) - - now = InvenTree.helpers.current_time() - - # Pass context data through to the template rendering. - # The following context variables are available for custom batch code generation - context = { - 'date': now, - 'year': now.year, - 'month': now.month, - 'day': now.day, - 'hour': now.hour, - 'minute': now.minute, - 'week': now.isocalendar()[1], - } - - return Template(batch_template).render(context) - - def default_delete_on_deplete(): """Return a default value for the 'delete_on_deplete' field. @@ -354,6 +321,7 @@ def default_delete_on_deplete(): class StockItem( InvenTree.models.InvenTreeBarcodeMixin, InvenTree.models.InvenTreeNotesMixin, + report.mixins.InvenTreeReportMixin, InvenTree.models.MetadataMixin, InvenTree.models.PluginValidationMixin, common.models.MetaMixin, @@ -376,7 +344,7 @@ class StockItem( stocktake_user: User that performed the most recent stocktake review_needed: Flag if StockItem needs review delete_on_deplete: If True, StockItem will be deleted when the stock level gets to zero - status: Status of this StockItem (ref: InvenTree.status_codes.StockStatus) + status: Status of this StockItem (ref: stock.status_codes.StockStatus) notes: Extra notes field build: Link to a Build (if this stock item was created from a build) is_building: Boolean field indicating if this stock item is currently being built (or is "in production") @@ -386,6 +354,11 @@ class StockItem( packaging: Description of how the StockItem is packaged (e.g. "reel", "loose", "tape" etc) """ + class Meta: + """Model meta options.""" + + verbose_name = _('Stock Item') + @staticmethod def get_api_url(): """Return API url.""" @@ -395,6 +368,50 @@ class StockItem( """Custom API instance filters.""" return {'parent': {'exclude_tree': self.pk}} + def get_test_keys(self, include_installed=True): + """Construct a flattened list of test 'keys' for this StockItem.""" + keys = [] + + for test in self.part.getTestTemplates(required=True): + if test.key not in keys: + keys.append(test.key) + + for test in self.part.getTestTemplates(required=False): + if test.key not in keys: + keys.append(test.key) + + for result in self.testResultList(include_installed=include_installed): + if result.key not in keys: + keys.append(result.key) + + return list(keys) + + def report_context(self): + """Generate custom report context data for this StockItem.""" + return { + 'barcode_data': self.barcode_data, + 'barcode_hash': self.barcode_hash, + 'batch': self.batch, + 'child_items': self.get_children(), + 'ipn': self.part.IPN, + 'installed_items': self.get_installed_items(cascade=True), + 'item': self, + 'name': self.part.full_name, + 'part': self.part, + 'qr_data': self.format_barcode(brief=True), + 'qr_url': self.get_absolute_url(), + 'parameters': self.part.parameters_map(), + 'quantity': InvenTree.helpers.normalize(self.quantity), + 'result_list': self.testResultList(include_installed=True), + 'results': self.testResultMap(include_installed=True), + 'serial': self.serial, + 'stock_item': self, + 'tests': self.testResultMap(), + 'test_keys': self.get_test_keys(), + 'test_template_list': self.part.getTestTemplates(), + 'test_templates': self.part.getTestTemplateMap(), + } + tags = TaggableManager(blank=True) # A Query filter which will be re-used in multiple places to determine if a StockItem is actually "in stock" @@ -1419,6 +1436,14 @@ class StockItem( if deltas is None: deltas = {} + # Prevent empty entry + if ( + entry_type == StockHistoryCode.STOCK_UPDATE + and len(deltas) == 0 + and not notes + ): + return + # Has a location been specified? location = kwargs.get('location', None) @@ -1670,6 +1695,9 @@ class StockItem( - Tracking history for the *other* item is deleted - Any allocations (build order, sales order) are moved to this StockItem """ + if isinstance(other_items, StockItem): + other_items = [other_items] + if len(other_items) == 0: return @@ -1677,7 +1705,7 @@ class StockItem( tree_ids = {self.tree_id} user = kwargs.get('user', None) - location = kwargs.get('location', None) + location = kwargs.get('location', self.location) notes = kwargs.get('notes', None) parent_id = self.parent.pk if self.parent else None @@ -1685,6 +1713,9 @@ class StockItem( for other in other_items: # If the stock item cannot be merged, return if not self.can_merge(other, raise_error=raise_error, **kwargs): + logger.warning( + 'Stock item <%s> could not be merge into <%s>', other.pk, self.pk + ) return tree_ids.add(other.tree_id) @@ -1714,7 +1745,7 @@ class StockItem( user, quantity=self.quantity, notes=notes, - deltas={'location': location.pk}, + deltas={'location': location.pk if location else None}, ) self.location = location @@ -1866,7 +1897,11 @@ class StockItem( except InvalidOperation: return False - if not self.in_stock: + allow_out_of_stock_transfer = common.models.InvenTreeSetting.get_setting( + 'STOCK_ALLOW_OUT_OF_STOCK_TRANSFER', backup_value=False, cache=False + ) + + if not allow_out_of_stock_transfer and not self.in_stock: raise ValidationError(_('StockItem cannot be moved as it is not in stock')) if quantity <= 0: @@ -2125,9 +2160,9 @@ class StockItem( def testResultList(self, **kwargs): """Return a list of test-result objects for this StockItem.""" - return self.testResultMap(**kwargs).values() + return list(self.testResultMap(**kwargs).values()) - def requiredTestStatus(self): + def requiredTestStatus(self, required_tests=None): """Return the status of the tests required for this StockItem. Return: @@ -2137,15 +2172,17 @@ class StockItem( - failed: Number of tests that have failed """ # All the tests required by the part object - required = self.part.getRequiredTests() + + if required_tests is None: + required_tests = self.part.getRequiredTests() results = self.testResultMap() - total = len(required) + total = len(required_tests) passed = 0 failed = 0 - for test in required: + for test in required_tests: key = InvenTree.helpers.generateTestKey(test.test_name) if key in results: @@ -2167,56 +2204,12 @@ class StockItem( """Return True if there are any 'required tests' associated with this StockItem.""" return self.required_test_count > 0 - def passedAllRequiredTests(self): + def passedAllRequiredTests(self, required_tests=None): """Returns True if this StockItem has passed all required tests.""" - status = self.requiredTestStatus() + status = self.requiredTestStatus(required_tests=required_tests) return status['passed'] >= status['total'] - def available_test_reports(self): - """Return a list of TestReport objects which match this StockItem.""" - reports = [] - - item_query = StockItem.objects.filter(pk=self.pk) - - for test_report in report.models.TestReport.objects.filter(enabled=True): - # Attempt to validate report filter (skip if invalid) - try: - filters = InvenTree.helpers.validateFilterString(test_report.filters) - if item_query.filter(**filters).exists(): - reports.append(test_report) - except (ValidationError, FieldError): - continue - - return reports - - @property - def has_test_reports(self): - """Return True if there are test reports available for this stock item.""" - return len(self.available_test_reports()) > 0 - - def available_labels(self): - """Return a list of Label objects which match this StockItem.""" - labels = [] - - item_query = StockItem.objects.filter(pk=self.pk) - - for lbl in label.models.StockItemLabel.objects.filter(enabled=True): - try: - filters = InvenTree.helpers.validateFilterString(lbl.filters) - - if item_query.filter(**filters).exists(): - labels.append(lbl) - except (ValidationError, FieldError): - continue - - return labels - - @property - def has_labels(self): - """Return True if there are any label templates available for this stock item.""" - return len(self.available_labels()) > 0 - @receiver(pre_delete, sender=StockItem, dispatch_uid='stock_item_pre_delete_log') def before_delete_stock_item(sender, instance, using, **kwargs): diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index a820de9ccc..bf8ab2e0ac 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -15,14 +15,16 @@ from rest_framework.serializers import ValidationError from sql_util.utils import SubqueryCount, SubquerySum from taggit.serializers import TagListSerializerField +import build.models import common.models import company.models import InvenTree.helpers import InvenTree.serializers -import InvenTree.status_codes +import order.models import part.filters as part_filters import part.models as part_models import stock.filters +import stock.status_codes from company.serializers import SupplierPartSerializer from InvenTree.serializers import InvenTreeCurrencySerializer, InvenTreeDecimalField from part.serializers import PartBriefSerializer, PartTestTemplateSerializer @@ -39,6 +41,133 @@ from .models import ( logger = logging.getLogger('inventree') +class GenerateBatchCodeSerializer(serializers.Serializer): + """Serializer for generating a batch code. + + Any of the provided write-only fields can be used for additional context. + """ + + class Meta: + """Metaclass options.""" + + fields = [ + 'batch_code', + 'build_order', + 'item', + 'location', + 'part', + 'purchase_order', + 'quantity', + ] + + read_only_fields = ['batch_code'] + + write_only_fields = [ + 'build_order', + 'item', + 'location', + 'part', + 'purchase_order', + 'quantity', + ] + + batch_code = serializers.CharField( + read_only=True, help_text=_('Generated batch code'), label=_('Batch Code') + ) + + build_order = serializers.PrimaryKeyRelatedField( + queryset=build.models.Build.objects.all(), + many=False, + required=False, + allow_null=True, + label=_('Build Order'), + help_text=_('Select build order'), + ) + + item = serializers.PrimaryKeyRelatedField( + queryset=StockItem.objects.all(), + many=False, + required=False, + allow_null=True, + label=_('Stock Item'), + help_text=_('Select stock item to generate batch code for'), + ) + + location = serializers.PrimaryKeyRelatedField( + queryset=StockLocation.objects.all(), + many=False, + required=False, + allow_null=True, + label=_('Location'), + help_text=_('Select location to generate batch code for'), + ) + + part = serializers.PrimaryKeyRelatedField( + queryset=part_models.Part.objects.all(), + many=False, + required=False, + allow_null=True, + label=_('Part'), + help_text=_('Select part to generate batch code for'), + ) + + purchase_order = serializers.PrimaryKeyRelatedField( + queryset=order.models.PurchaseOrder.objects.all(), + many=False, + required=False, + allow_null=True, + label=_('Purchase Order'), + help_text=_('Select purchase order'), + ) + + quantity = serializers.FloatField( + required=False, + allow_null=True, + label=_('Quantity'), + help_text=_('Enter quantity for batch code'), + ) + + +class GenerateSerialNumberSerializer(serializers.Serializer): + """Serializer for generating one or multiple serial numbers. + + Any of the provided write-only fields can be used for additional context. + + Note that in the case where multiple serial numbers are required, + the "serial" field will return a string with multiple serial numbers separated by a comma. + """ + + class Meta: + """Metaclass options.""" + + fields = ['serial', 'part', 'quantity'] + + read_only_fields = ['serial'] + + write_only_fields = ['part', 'quantity'] + + serial = serializers.CharField( + read_only=True, help_text=_('Generated serial number'), label=_('Serial Number') + ) + + part = serializers.PrimaryKeyRelatedField( + queryset=part_models.Part.objects.all(), + many=False, + required=False, + allow_null=True, + label=_('Part'), + help_text=_('Select part to generate serial number for'), + ) + + quantity = serializers.IntegerField( + required=False, + allow_null=False, + default=1, + label=_('Quantity'), + help_text=_('Quantity of serial numbers to generate'), + ) + + class LocationBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): """Provides a brief serializer for a StockLocation object.""" @@ -154,7 +283,10 @@ class StockItemTestResultSerializer(InvenTree.serializers.InvenTreeModelSerializ return data -class StockItemSerializerBrief(InvenTree.serializers.InvenTreeModelSerializer): +class StockItemSerializerBrief( + InvenTree.serializers.NotesFieldMixin, + InvenTree.serializers.InvenTreeModelSerializer, +): """Brief serializers for a StockItem.""" class Meta: @@ -796,8 +928,8 @@ class StockChangeStatusSerializer(serializers.Serializer): return items status = serializers.ChoiceField( - choices=InvenTree.status_codes.StockStatus.items(), - default=InvenTree.status_codes.StockStatus.OK.value, + choices=stock.status_codes.StockStatus.items(), + default=stock.status_codes.StockStatus.OK.value, label=_('Status'), ) @@ -844,7 +976,7 @@ class StockChangeStatusSerializer(serializers.Serializer): transaction_notes.append( StockItemTracking( item=item, - tracking_type=InvenTree.status_codes.StockHistoryCode.EDITED.value, + tracking_type=stock.status_codes.StockHistoryCode.EDITED.value, date=now, deltas=deltas, user=user, @@ -1290,7 +1422,7 @@ def stock_item_adjust_status_options(): In particular, include a Null option for the status field. """ - return [(None, _('No Change'))] + InvenTree.status_codes.StockStatus.items() + return [(None, _('No Change'))] + stock.status_codes.StockStatus.items() class StockAdjustmentItemSerializer(serializers.Serializer): diff --git a/src/backend/InvenTree/stock/status_codes.py b/src/backend/InvenTree/stock/status_codes.py new file mode 100644 index 0000000000..3c646bc455 --- /dev/null +++ b/src/backend/InvenTree/stock/status_codes.py @@ -0,0 +1,91 @@ +"""Stock status codes.""" + +from django.utils.translation import gettext_lazy as _ + +from generic.states import StatusCode + + +class StockStatus(StatusCode): + """Status codes for Stock.""" + + OK = 10, _('OK'), 'success' # Item is OK + ATTENTION = 50, _('Attention needed'), 'warning' # Item requires attention + DAMAGED = 55, _('Damaged'), 'warning' # Item is damaged + DESTROYED = 60, _('Destroyed'), 'danger' # Item is destroyed + REJECTED = 65, _('Rejected'), 'danger' # Item is rejected + LOST = 70, _('Lost'), 'dark' # Item has been lost + QUARANTINED = ( + 75, + _('Quarantined'), + 'info', + ) # Item has been quarantined and is unavailable + RETURNED = 85, _('Returned'), 'warning' # Item has been returned from a customer + + +class StockStatusGroups: + """Groups for StockStatus codes.""" + + # The following codes correspond to parts that are 'available' or 'in stock' + AVAILABLE_CODES = [ + StockStatus.OK.value, + StockStatus.ATTENTION.value, + StockStatus.DAMAGED.value, + StockStatus.RETURNED.value, + ] + + +class StockHistoryCode(StatusCode): + """Status codes for StockHistory.""" + + LEGACY = 0, _('Legacy stock tracking entry') + + CREATED = 1, _('Stock item created') + + # Manual editing operations + EDITED = 5, _('Edited stock item') + ASSIGNED_SERIAL = 6, _('Assigned serial number') + + # Manual stock operations + STOCK_COUNT = 10, _('Stock counted') + STOCK_ADD = 11, _('Stock manually added') + STOCK_REMOVE = 12, _('Stock manually removed') + + # Location operations + STOCK_MOVE = 20, _('Location changed') + STOCK_UPDATE = 25, _('Stock updated') + + # Installation operations + INSTALLED_INTO_ASSEMBLY = 30, _('Installed into assembly') + REMOVED_FROM_ASSEMBLY = 31, _('Removed from assembly') + + INSTALLED_CHILD_ITEM = 35, _('Installed component item') + REMOVED_CHILD_ITEM = 36, _('Removed component item') + + # Stock splitting operations + SPLIT_FROM_PARENT = 40, _('Split from parent item') + SPLIT_CHILD_ITEM = 42, _('Split child item') + + # Stock merging operations + MERGED_STOCK_ITEMS = 45, _('Merged stock items') + + # Convert stock item to variant + CONVERTED_TO_VARIANT = 48, _('Converted to variant') + + # Build order codes + BUILD_OUTPUT_CREATED = 50, _('Build order output created') + BUILD_OUTPUT_COMPLETED = 55, _('Build order output completed') + BUILD_OUTPUT_REJECTED = 56, _('Build order output rejected') + BUILD_CONSUMED = 57, _('Consumed by build order') + + # Sales order codes + SHIPPED_AGAINST_SALES_ORDER = 60, _('Shipped against Sales Order') + + # Purchase order codes + RECEIVED_AGAINST_PURCHASE_ORDER = 70, _('Received against Purchase Order') + + # Return order codes + RETURNED_AGAINST_RETURN_ORDER = 80, _('Returned against Return Order') + + # Customer actions + SENT_TO_CUSTOMER = 100, _('Sent to customer') + RETURNED_FROM_CUSTOMER = 105, _('Returned from customer') diff --git a/src/backend/InvenTree/stock/templates/stock/item.html b/src/backend/InvenTree/stock/templates/stock/item.html index 33810b6da6..214a409bcd 100644 --- a/src/backend/InvenTree/stock/templates/stock/item.html +++ b/src/backend/InvenTree/stock/templates/stock/item.html @@ -208,6 +208,8 @@ 'stock-notes', '{% url "api-stock-detail" item.pk %}', { + model_type: 'stockitem', + model_id: {{ item.pk }}, {% if roles.stock.change and user_owns_item %} editable: true, {% else %} @@ -233,6 +235,7 @@ {% settings_value "TEST_STATION_DATA" as test_station_fields %} + {% if item.part.trackable %} loadStockTestResultsTable( $("#test-result-table"), { part: {{ item.part.id }}, @@ -242,12 +245,9 @@ ); $("#test-report").click(function() { - printReports({ - items: [{{ item.pk }}], - key: 'item', - url: '{% url "api-stockitem-testreport-list" %}', - }); + printReports('stockitem', [{{ item.pk }}]); }); + {% endif %} {% if user.is_staff %} $("#delete-test-results").click(function() { diff --git a/src/backend/InvenTree/stock/templates/stock/item_base.html b/src/backend/InvenTree/stock/templates/stock/item_base.html index c0e12b172c..05107cac28 100644 --- a/src/backend/InvenTree/stock/templates/stock/item_base.html +++ b/src/backend/InvenTree/stock/templates/stock/item_base.html @@ -494,19 +494,14 @@ $('#stock-uninstall').click(function() { }); $("#stock-test-report").click(function() { - printReports({ - items: [{{ item.pk }}], - key: 'item', - url: '{% url "api-stockitem-testreport-list" %}', - }); + printReports('stockitem', [{{ item.pk }}]); }); $("#print-label").click(function() { printLabels({ items: [{{ item.pk }}], + model_type: 'stockitem', singular_name: '{% trans "stock item" escape %}', - url: '{% url "api-stockitem-label-list" %}', - key: 'item', }); }); diff --git a/src/backend/InvenTree/stock/templates/stock/location.html b/src/backend/InvenTree/stock/templates/stock/location.html index 4d36aa6d22..50483ab0a3 100644 --- a/src/backend/InvenTree/stock/templates/stock/location.html +++ b/src/backend/InvenTree/stock/templates/stock/location.html @@ -170,6 +170,13 @@ {% trans "Stock Items" %} {{ location.item_count }} + {% if location.location_type %} + + + {% trans "Location Type" %} + {{ location.location_type }} + + {% endif %} {% else %} @@ -284,9 +291,8 @@ printLabels({ items: locs, + model_type: 'stocklocation', singular_name: '{% trans "stock location" escape %}', - key: 'location', - url: '{% url "api-stocklocation-label-list" %}', }); }); {% endif %} @@ -294,11 +300,7 @@ {% if report_enabled %} $('#print-location-report').click(function() { - printReports({ - items: [{{ location.pk }}], - key: 'location', - url: '{% url "api-stocklocation-report-list" %}', - }); + printReports('stocklocation', [{{ location.pk }}]); }); {% endif %} diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index 88fe7bb0c0..07b08334ea 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -17,7 +17,6 @@ import build.models import company.models import part.models from common.models import InvenTreeSetting -from InvenTree.status_codes import StockHistoryCode, StockStatus from InvenTree.unit_test import InvenTreeAPITestCase from part.models import Part, PartTestTemplate from stock.models import ( @@ -26,6 +25,7 @@ from stock.models import ( StockLocation, StockLocationType, ) +from stock.status_codes import StockHistoryCode, StockStatus class StockAPITestCase(InvenTreeAPITestCase): @@ -552,7 +552,7 @@ class StockItemListTest(StockAPITestCase): response = self.get( self.list_url, {'location': 'null', 'cascade': False}, expected_code=200 ) - self.assertTrue(len(response.data) < StockItem.objects.count()) + self.assertLess(len(response.data), StockItem.objects.count()) # Filter with "cascade=True" response = self.get( @@ -662,10 +662,10 @@ class StockItemListTest(StockAPITestCase): self.assertEqual(n_stock_items, len(with_batch) + len(without_batch)) for item in with_batch: - self.assertFalse(item['batch'] in [None, '']) + self.assertNotIn(item['batch'], [None, '']) for item in without_batch: - self.assertTrue(item['batch'] in [None, '']) + self.assertIn(item['batch'], [None, '']) def test_filter_by_tracked(self): """Test the 'tracked' filter. @@ -746,9 +746,7 @@ class StockItemListTest(StockAPITestCase): self.assertEqual(response.status_code, 200) - self.assertTrue( - isinstance(response, django.http.response.StreamingHttpResponse) - ) + self.assertIsInstance(response, django.http.response.StreamingHttpResponse) file_object = io.StringIO(response.getvalue().decode('utf-8')) @@ -1132,7 +1130,7 @@ class StockItemTest(StockAPITestCase): # Check that each serial number was created for i in range(1, 11): - self.assertTrue(str(i) in sn) + self.assertIn(str(i), sn) # Check the unique stock item has been created @@ -1306,10 +1304,13 @@ class StockItemTest(StockAPITestCase): self.assertIn('This field is required', str(response.data['location'])) + # TODO: Return to this and work out why it is taking so long + # Ref: https://github.com/inventree/InvenTree/pull/7157 response = self.post( url, {'location': '1', 'notes': 'Returned from this customer for testing'}, expected_code=201, + max_query_time=5.0, ) item.refresh_from_db() @@ -1419,7 +1420,7 @@ class StocktakeTest(StockAPITestCase): data = {} # POST with a valid action - response = self.post(url, data) + response = self.post(url, data, expected_code=400) self.assertIn('This field is required', str(response.data['items'])) @@ -1454,7 +1455,7 @@ class StocktakeTest(StockAPITestCase): # POST with an invalid quantity value data['items'] = [{'pk': 1234, 'quantity': '10x0d'}] - response = self.post(url, data) + response = self.post(url, data, expected_code=400) self.assertContains( response, 'A valid number is required', @@ -1463,7 +1464,8 @@ class StocktakeTest(StockAPITestCase): data['items'] = [{'pk': 1234, 'quantity': '-1.234'}] - response = self.post(url, data) + response = self.post(url, data, expected_code=400) + self.assertContains( response, 'Ensure this value is greater than or equal to 0', @@ -1472,6 +1474,14 @@ class StocktakeTest(StockAPITestCase): def test_transfer(self): """Test stock transfers.""" + stock_item = StockItem.objects.get(pk=1234) + + # Mark this stock item as "quarantined" (cannot be moved) + stock_item.status = StockStatus.QUARANTINED.value + stock_item.save() + + InvenTreeSetting.set_setting('STOCK_ALLOW_OUT_OF_STOCK_TRANSFER', False) + data = { 'items': [{'pk': 1234, 'quantity': 10}], 'location': 1, @@ -1480,6 +1490,14 @@ class StocktakeTest(StockAPITestCase): url = reverse('api-stock-transfer') + # First attempt should *fail* - stock item is quarantined + response = self.post(url, data, expected_code=400) + + self.assertIn('cannot be moved as it is not in stock', str(response.data)) + + # Now, allow transfer of "out of stock" items + InvenTreeSetting.set_setting('STOCK_ALLOW_OUT_OF_STOCK_TRANSFER', True) + # This should succeed response = self.post(url, data, expected_code=201) diff --git a/src/backend/InvenTree/stock/test_views.py b/src/backend/InvenTree/stock/test_views.py index e6bb420636..0552a5af7a 100644 --- a/src/backend/InvenTree/stock/test_views.py +++ b/src/backend/InvenTree/stock/test_views.py @@ -5,9 +5,9 @@ from django.test import tag from django.urls import reverse from common.models import InvenTreeSetting -from InvenTree.status_codes import StockStatus from InvenTree.unit_test import InvenTreeTestCase from stock.models import StockItem, StockLocation +from stock.status_codes import StockStatus from users.models import Owner diff --git a/src/backend/InvenTree/stock/tests.py b/src/backend/InvenTree/stock/tests.py index 89d9e8e9d2..fe7a2b0e9d 100644 --- a/src/backend/InvenTree/stock/tests.py +++ b/src/backend/InvenTree/stock/tests.py @@ -10,10 +10,10 @@ from django.test import override_settings from build.models import Build from common.models import InvenTreeSetting from company.models import Company -from InvenTree.status_codes import StockHistoryCode from InvenTree.unit_test import InvenTreeTestCase from order.models import SalesOrder from part.models import Part, PartTestTemplate +from stock.status_codes import StockHistoryCode from .models import StockItem, StockItemTestResult, StockItemTracking, StockLocation diff --git a/src/backend/InvenTree/templates/InvenTree/settings/global.html b/src/backend/InvenTree/templates/InvenTree/settings/global.html index d532bc5727..983700591d 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/global.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/global.html @@ -10,6 +10,8 @@ {% block content %} +{% include "pui_banner.html" with mode='admin' %} +
{% include "InvenTree/settings/setting.html" with key="INVENTREE_COMPANY_NAME" icon="fa-building" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/login.html b/src/backend/InvenTree/templates/InvenTree/settings/login.html index 2cdd7784f1..d2b557978c 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/login.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/login.html @@ -16,6 +16,8 @@ {% endif %} +{% include "pui_banner.html" with mode='admin' %} +
{% include "InvenTree/settings/setting.html" with key="LOGIN_ENABLE_PWD_FORGOT" icon="fa-user-lock" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/part.html b/src/backend/InvenTree/templates/InvenTree/settings/part.html index 00d606c5b9..dae8368b7f 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/part.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/part.html @@ -15,6 +15,7 @@ {% include "InvenTree/settings/setting.html" with key="PART_IPN_REGEX" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DUPLICATE_IPN" %} {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_EDIT_IPN" %} + {% include "InvenTree/settings/setting.html" with key="PART_ALLOW_DELETE_FROM_ASSEMBLY" %} {% include "InvenTree/settings/setting.html" with key="PART_NAME_FORMAT" %} {% include "InvenTree/settings/setting.html" with key="PART_SHOW_RELATED" icon="fa-random" %} {% include "InvenTree/settings/setting.html" with key="PART_CREATE_INITIAL" icon="fa-boxes" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/plugin.html b/src/backend/InvenTree/templates/InvenTree/settings/plugin.html index ea1cc4341a..f97c98795e 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/plugin.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/plugin.html @@ -15,6 +15,8 @@ {% trans "Changing the settings below require you to immediately restart the server. Do not change this while under active usage." %} +{% include "pui_banner.html" with mode='admin' %} +
diff --git a/src/backend/InvenTree/templates/InvenTree/settings/pricing.html b/src/backend/InvenTree/templates/InvenTree/settings/pricing.html index cba117ad14..8e99fbc983 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/pricing.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/pricing.html @@ -12,6 +12,7 @@
{% include "InvenTree/settings/setting.html" with key="INVENTREE_DEFAULT_CURRENCY" icon="fa-globe" %} + {% include "InvenTree/settings/setting.html" with key="CURRENCY_CODES" %} {% include "InvenTree/settings/setting.html" with key="PART_INTERNAL_PRICE" %} {% include "InvenTree/settings/setting.html" with key="PART_BOM_USE_INTERNAL_PRICE" %} {% include "InvenTree/settings/setting.html" with key="PRICING_DECIMAL_PLACES_MIN" icon='fa-dollar-sign' %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/report.html b/src/backend/InvenTree/templates/InvenTree/settings/report.html index 683625bd74..6622befc36 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/report.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/report.html @@ -10,6 +10,8 @@ {% block content %} +{% include "pui_banner.html" with mode='admin' %} +
{% include "InvenTree/settings/setting.html" with key="REPORT_ENABLE" icon="fa-file-pdf" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html b/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html index cbc0b56e05..8e857739a7 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/settings_js.html @@ -19,7 +19,7 @@ $('table').find('.boolean-setting').change(function() { if (notification) { url = `/api/settings/notification/${pk}/`; } else if (plugin) { - url = `/api/plugins/settings/${plugin}/${setting}/`; + url = `/api/plugins/${plugin}/settings/${setting}/`; } else if (user) { url = `/api/settings/user/${setting}/`; } diff --git a/src/backend/InvenTree/templates/InvenTree/settings/so.html b/src/backend/InvenTree/templates/InvenTree/settings/so.html index 9be6df6025..493ac32407 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/so.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/so.html @@ -15,6 +15,7 @@ {% include "InvenTree/settings/setting.html" with key="SALESORDER_REQUIRE_RESPONSIBLE" %} {% include "InvenTree/settings/setting.html" with key="SALESORDER_DEFAULT_SHIPMENT" icon="fa-truck-loading" %} {% include "InvenTree/settings/setting.html" with key="SALESORDER_EDIT_COMPLETED_ORDERS" icon='fa-edit' %} + {% include "InvenTree/settings/setting.html" with key="SALESORDER_SHIP_COMPLETE" %}
diff --git a/src/backend/InvenTree/templates/InvenTree/settings/stock.html b/src/backend/InvenTree/templates/InvenTree/settings/stock.html index 9ccca21af0..89dd5e95b9 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/stock.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/stock.html @@ -23,6 +23,7 @@ {% include "InvenTree/settings/setting.html" with key="STOCK_LOCATION_DEFAULT_ICON" icon="fa-icons" %} {% include "InvenTree/settings/setting.html" with key="STOCK_SHOW_INSTALLED_ITEMS" icon="fa-sitemap" %} {% include "InvenTree/settings/setting.html" with key="STOCK_ENFORCE_BOM_INSTALLATION" icon="fa-check-circle" %} + {% include "InvenTree/settings/setting.html" with key="STOCK_ALLOW_OUT_OF_STOCK_TRANSFER" icon="fa-dolly" %} {% include "InvenTree/settings/setting.html" with key="TEST_STATION_DATA" icon="fa-network-wired" %} diff --git a/src/backend/InvenTree/templates/InvenTree/settings/user.html b/src/backend/InvenTree/templates/InvenTree/settings/user.html index f164d2aa97..c0fa53aedc 100644 --- a/src/backend/InvenTree/templates/InvenTree/settings/user.html +++ b/src/backend/InvenTree/templates/InvenTree/settings/user.html @@ -162,6 +162,9 @@
+{% inventree_customize 'hide_active_sessions' as hide_active_sessions %} + +{% if not hide_active_sessions %}
@@ -211,6 +214,8 @@
+{% endif %} + {% endblock content %} {% block js_ready %} diff --git a/src/backend/InvenTree/templates/account/login.html b/src/backend/InvenTree/templates/account/login.html index b31b183b31..71b570a4d8 100644 --- a/src/backend/InvenTree/templates/account/login.html +++ b/src/backend/InvenTree/templates/account/login.html @@ -13,6 +13,8 @@ {% inventree_customize 'login_message' as login_message %} {% mail_configured as mail_conf %} +{% include "pui_banner.html" with mode='user' %} +

{% trans "Sign In" %}

{% include "spacer.html" %} diff --git a/src/backend/InvenTree/templates/email/build_order_required_stock.html b/src/backend/InvenTree/templates/email/build_order_required_stock.html index aba84be41a..d586575d9a 100644 --- a/src/backend/InvenTree/templates/email/build_order_required_stock.html +++ b/src/backend/InvenTree/templates/email/build_order_required_stock.html @@ -22,7 +22,7 @@ {% for line in lines %} - {{ line.part.full_name }}{% if part.description %} - {{ part.description }}{% endif %} + {{ line.part.full_name }}{% if line.part.description %} - {{ line.part.description }}{% endif %} {% decimal line.required %} {% include "part/part_units.html" with part=line.part %} diff --git a/src/backend/InvenTree/templates/js/dynamic/settings.js b/src/backend/InvenTree/templates/js/dynamic/settings.js index 56984189fe..61787290ec 100644 --- a/src/backend/InvenTree/templates/js/dynamic/settings.js +++ b/src/backend/InvenTree/templates/js/dynamic/settings.js @@ -44,7 +44,7 @@ function editSetting(key, options={}) { var url = ''; if (plugin) { - url = `/api/plugins/settings/${plugin}/${key}/`; + url = `/api/plugins/${plugin}/settings/${key}/`; } else if (notification) { url = `/api/settings/notification/${pk}/`; } else if (global) { diff --git a/src/backend/InvenTree/templates/js/translated/api.js b/src/backend/InvenTree/templates/js/translated/api.js index c9bd3dbd1a..58f001bdbf 100644 --- a/src/backend/InvenTree/templates/js/translated/api.js +++ b/src/backend/InvenTree/templates/js/translated/api.js @@ -60,7 +60,7 @@ function inventreeGet(url, filters={}, options={}) { xhr.setRequestHeader('X-CSRFToken', csrftoken); }, url: url, - type: 'GET', + type: options.method ?? 'GET', data: filters, dataType: options.dataType || 'json', contentType: options.contentType || 'application/json', diff --git a/src/backend/InvenTree/templates/js/translated/build.js b/src/backend/InvenTree/templates/js/translated/build.js index 899866ae35..f761296f8f 100644 --- a/src/backend/InvenTree/templates/js/translated/build.js +++ b/src/backend/InvenTree/templates/js/translated/build.js @@ -974,11 +974,13 @@ function loadBuildOrderAllocationTable(table, options={}) { let ref = row.build_detail?.reference ?? row.build; let html = renderLink(ref, `/build/${row.build}/`); - html += `- ${row.build_detail.title}`; + if (row.build_detail) { + html += `- ${row.build_detail.title}`; - html += buildStatusDisplay(row.build_detail.status, { - classes: 'float-right', - }); + html += buildStatusDisplay(row.build_detail.status, { + classes: 'float-right', + }); + } return html; } @@ -1109,8 +1111,7 @@ function loadBuildOutputTable(build_info, options={}) { setupFilterList('builditems', $(table), options.filterTarget || '#filter-list-incompletebuilditems', { labels: { - url: '{% url "api-stockitem-label-list" %}', - key: 'item', + model_type: 'stockitem', }, singular_name: '{% trans "build output" %}', plural_name: '{% trans "build outputs" %}', @@ -1123,29 +1124,31 @@ function loadBuildOutputTable(build_info, options={}) { }); // Request list of required tests for the part being assembled - inventreeGet( - '{% url "api-part-test-template-list" %}', - { - part: build_info.part, - required: true, - enabled: true, - }, - { - async: false, - success: function(response) { - test_templates = []; - response.forEach(function(item) { - // Only include "required" tests - if (item.required) { - test_templates.push(item); - } - }); + if (build_info.trackable) { + inventreeGet( + '{% url "api-part-test-template-list" %}', + { + part: build_info.part, + required: true, + enabled: true, }, - error: function() { - test_templates = []; + { + async: false, + success: function(response) { + test_templates = []; + response.forEach(function(item) { + // Only include "required" tests + if (item.required) { + test_templates.push(item); + } + }); + }, + error: function() { + test_templates = []; + } } - } - ); + ); + } // Callback function to load the allocated stock items function reloadOutputAllocations() { @@ -2004,7 +2007,6 @@ function loadBuildTable(table, options) { setupFilterList('build', table, filterTarget, { download: true, report: { - url: '{% url "api-build-report-list" %}', key: 'build', } }); @@ -2448,8 +2450,7 @@ function loadBuildLineTable(table, build_id, options={}) { if (!options.data) { setupFilterList('buildlines', $(table), filterTarget, { labels: { - url: '{% url "api-buildline-label-list" %}', - key: 'line', + modeltype: 'buildline', }, singular_name: '{% trans "build line" %}', plural_name: '{% trans "build lines" %}', diff --git a/src/backend/InvenTree/templates/js/translated/filters.js b/src/backend/InvenTree/templates/js/translated/filters.js index 51fcc265b6..a6ad9e505c 100644 --- a/src/backend/InvenTree/templates/js/translated/filters.js +++ b/src/backend/InvenTree/templates/js/translated/filters.js @@ -526,11 +526,7 @@ function setupFilterList(tableKey, table, target, options={}) { items.push(row.pk); }); - printReports({ - items: items, - url: options.report.url, - key: options.report.key - }); + printReports(options.report.key, items); }); } @@ -548,8 +544,7 @@ function setupFilterList(tableKey, table, target, options={}) { items: items, singular_name: options.singular_name, plural_name: options.plural_name, - url: options.labels.url, - key: options.labels.key, + model_type: options.labels?.model_type ?? options.model_type, }); }); } diff --git a/src/backend/InvenTree/templates/js/translated/forms.js b/src/backend/InvenTree/templates/js/translated/forms.js index 3f5539b7d8..56ae5a2c3c 100644 --- a/src/backend/InvenTree/templates/js/translated/forms.js +++ b/src/backend/InvenTree/templates/js/translated/forms.js @@ -1178,6 +1178,10 @@ function getFormFieldValue(name, field={}, options={}) { return null; } + if (field.hidden && !!field.value) { + return field.value; + } + var value = null; let guessed_type = guessFieldType(el); @@ -2026,7 +2030,7 @@ function initializeRelatedField(field, fields, options={}) { // Each 'row' must have the 'id' attribute for (var idx = 0; idx < data.length; idx++) { - data[idx].id = data[idx].pk; + data[idx].id = data[idx][field.pk_field ?? 'pk']; } // Ref: https://select2.org/data-sources/formats @@ -2050,7 +2054,9 @@ function initializeRelatedField(field, fields, options={}) { data = item.element.instance; } - if (!data.pk) { + const pkField = field.pk_field ?? 'pk'; + + if (!data[pkField]) { return $(searching()); } @@ -2071,6 +2077,8 @@ function initializeRelatedField(field, fields, options={}) { // Or, use the raw 'item' data as a backup var data = item; + const pkField = field.pk_field ?? 'pk'; + if (item.element && item.element.instance) { data = item.element.instance; } @@ -2080,7 +2088,7 @@ function initializeRelatedField(field, fields, options={}) { field.onSelect(data, field, options); } - if (!data.pk) { + if (!data[pkField]) { return field.placeholder || ''; } @@ -2242,7 +2250,9 @@ function setRelatedFieldData(name, data, options={}) { var select = getFormFieldElement(name, options); - var option = new Option(name, data.pk, true, true); + const pkField = options?.fields[name]?.pk_field ?? 'pk'; + + var option = new Option(name, data[pkField], true, true); // Assign the JSON data to the 'instance' attribute, // so we can access and render it later diff --git a/src/backend/InvenTree/templates/js/translated/helpers.js b/src/backend/InvenTree/templates/js/translated/helpers.js index dedd3cdc87..df2f92c008 100644 --- a/src/backend/InvenTree/templates/js/translated/helpers.js +++ b/src/backend/InvenTree/templates/js/translated/helpers.js @@ -482,6 +482,10 @@ function setupNotesField(element, url, options={}) { form_data.append('image', imageFile); + // Add model type and ID to the form data + form_data.append('model_type', options.model_type); + form_data.append('model_id', options.model_id); + inventreeFormDataUpload('{% url "api-notes-image-list" %}', form_data, { success: function(response) { onSuccess(response.image); diff --git a/src/backend/InvenTree/templates/js/translated/label.js b/src/backend/InvenTree/templates/js/translated/label.js index a9a75f0f56..fff34aecf6 100644 --- a/src/backend/InvenTree/templates/js/translated/label.js +++ b/src/backend/InvenTree/templates/js/translated/label.js @@ -41,13 +41,15 @@ const defaultLabelTemplates = { * - Request printed labels * * Required options: - * - url: The list URL for the particular template type + * - model_type: The "type" of label template to print against * - items: The list of items to be printed * - key: The key to use in the query parameters * - plural_name: The plural name of the item type */ function printLabels(options) { + let plugin_name = ''; + if (!options.items || options.items.length == 0) { showAlertDialog( '{% trans "Select Items" %}', @@ -56,145 +58,104 @@ function printLabels(options) { return; } + // Join the items with a comma character + const item_string = options.items.join(','); + let params = { enabled: true, + model_type: options.model_type, + items: item_string, }; - params[options.key] = options.items; + function getPrintingFields(plugin_slug, callback) { - // Request a list of available label templates from the server - let labelTemplates = []; - inventreeGet(options.url, params, { - async: false, - success: function (response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Labels Found" %}', - '{% trans "No label templates found which match the selected items" %}', - ); - return; + let url = '{% url "api-label-print" %}' + `?plugin=${plugin_slug}`; + + inventreeGet( + url, + {}, + { + method: 'OPTIONS', + success: function(response) { + let fields = response?.actions?.POST ?? {}; + callback(fields); + } } - - labelTemplates = response; - } - }); - - // Request a list of available label printing plugins from the server - let plugins = []; - inventreeGet(`/api/plugins/`, { mixin: 'labels' }, { - async: false, - success: function (response) { - plugins = response; - } - }); - - let header_html = ""; - - // show how much items are selected if there is more than one item selected - if (options.items.length > 1) { - header_html += ` -
- ${options.items.length} ${options.plural_name} {% trans "selected" %} -
- `; + ); } - const updateFormUrl = (formOptions) => { - const plugin = getFormFieldValue("_plugin", formOptions.fields._plugin, formOptions); - const labelTemplate = getFormFieldValue("_label_template", formOptions.fields._label_template, formOptions); - const params = $.param({ plugin, [options.key]: options.items }) - formOptions.url = `${options.url}${labelTemplate ?? "1"}/print/?${params}`; - } + // Callback when a particular label printing plugin is selected + function onPluginSelected(value, name, field, formOptions) { - const updatePrintingOptions = (formOptions) => { - let printingOptionsRes = null; - $.ajax({ - url: formOptions.url, - type: "OPTIONS", - contentType: "application/json", - dataType: "json", - accepts: { json: "application/json" }, - async: false, - success: (res) => { printingOptionsRes = res }, - error: (xhr) => showApiError(xhr, formOptions.url) + if (value == plugin_name) { + return; + } + + plugin_name = value; + + // Request new printing options for the selected plugin + getPrintingFields(value, function(fields) { + formOptions.fields = getFormFields(fields); + updateForm(formOptions); + + // workaround to fix a bug where one cannot scroll after changing the plugin + // without opening and closing the select box again manually + $("#id__plugin").select2("open"); + $("#id__plugin").select2("close"); }); - - const printingOptions = printingOptionsRes.actions.POST || {}; - - // clear all other options - formOptions.fields = { - _label_template: formOptions.fields._label_template, - _plugin: formOptions.fields._plugin, - } - - if (Object.keys(printingOptions).length > 0) { - formOptions.fields = { - ...formOptions.fields, - divider: { type: "candy", html: `
{% trans "Printing Options" %}
` }, - ...printingOptions, - }; - } - - // update form - updateForm(formOptions); - - // workaround to fix a bug where one cannot scroll after changing the plugin - // without opening and closing the select box again manually - $("#id__plugin").select2("open"); - $("#id__plugin").select2("close"); } - const printingFormOptions = { - title: options.items.length === 1 ? `{% trans "Print label" %}` : `{% trans "Print labels" %}`, - submitText: `{% trans "Print" %}`, - method: "POST", - disableSuccessMessage: true, - header_html, - fields: { - _label_template: { - label: `{% trans "Select label template" %}`, - type: "choice", - localOnly: true, - value: defaultLabelTemplates[options.key], - choices: labelTemplates.map(t => ({ - value: t.pk, - display_name: `${t.name} - ${t.description}`, - })), - onEdit: (_value, _name, _field, formOptions) => { - updateFormUrl(formOptions); - } - }, - _plugin: { - label: `{% trans "Select plugin" %}`, - type: "choice", - localOnly: true, - value: user_settings.LABEL_DEFAULT_PRINTER || plugins[0].key, - choices: plugins.map(p => ({ - value: p.key, - display_name: `${p.name} - ${p.meta.human_name}`, - })), - onEdit: (_value, _name, _field, formOptions) => { - updateFormUrl(formOptions); - updatePrintingOptions(formOptions); - } - }, + const baseFields = { + template: {}, + plugin: { + idField: 'key', }, - onSuccess: (response) => { - if (response.file) { - // Download the generated file - window.open(response.file); + items: {} + }; + + function getFormFields(customFields={}) { + let fields = { + ...baseFields, + ...customFields, + }; + + fields['template'].filters = { + enabled: true, + model_type: options.model_type, + items: item_string, + }; + + fields['plugin'].filters = { + active: true, + mixin: 'labels' + }; + + fields['plugin'].onEdit = onPluginSelected; + + fields['items'].hidden = true; + fields['items'].value = options.items; + + return fields; + } + + constructForm('{% url "api-label-print" %}', { + method: 'POST', + title: '{% trans "Print Label" %}', + fields: getFormFields(), + onSuccess: function(response) { + if (response.complete) { + if (response.output) { + window.open(response.output, '_blank'); + } else { + showMessage('{% trans "Labels sent to printer" %}', { + style: 'success' + }); + } } else { - showMessage('{% trans "Labels sent to printer" %}', { - style: 'success', + showMessage('{% trans "Label printing failed" %}', { + style: 'warning', }); } } - }; - - // construct form - constructForm(null, printingFormOptions); - - // fetch the options for the default plugin - updateFormUrl(printingFormOptions); - updatePrintingOptions(printingFormOptions); + }); } diff --git a/src/backend/InvenTree/templates/js/translated/model_renderers.js b/src/backend/InvenTree/templates/js/translated/model_renderers.js index 66b05bf44d..d2d0573ab8 100644 --- a/src/backend/InvenTree/templates/js/translated/model_renderers.js +++ b/src/backend/InvenTree/templates/js/translated/model_renderers.js @@ -92,6 +92,12 @@ function getModelRenderer(model) { return renderGroup; case 'projectcode': return renderProjectCode; + case 'labeltemplate': + return renderLabelTemplate; + case 'reporttemplate': + return renderReportTemplate; + case 'pluginconfig': + return renderPluginConfig; default: // Un-handled model type console.error(`Rendering not implemented for model '${model}'`); @@ -540,3 +546,42 @@ function renderProjectCode(data, parameters={}) { parameters ); } + + +// Renderer for "LabelTemplate" model +function renderLabelTemplate(data, parameters={}) { + + return renderModel( + { + text: data.name, + textSecondary: data.description, + }, + parameters + ); +} + + +// Renderer for "ReportTemplate" model +function renderReportTemplate(data, parameters={}) { + + return renderModel( + { + text: data.name, + textSecondary: data.description, + }, + parameters + ); +} + + +// Renderer for "PluginConfig" model +function renderPluginConfig(data, parameters={}) { + + return renderModel( + { + text: data.name, + textSecondary: data.meta?.description, + }, + parameters + ); +} diff --git a/src/backend/InvenTree/templates/js/translated/part.js b/src/backend/InvenTree/templates/js/translated/part.js index ffcea223d3..48b3dcfdbb 100644 --- a/src/backend/InvenTree/templates/js/translated/part.js +++ b/src/backend/InvenTree/templates/js/translated/part.js @@ -2281,8 +2281,7 @@ function loadPartTable(table, url, options={}) { setupFilterList('parts', $(table), options.filterTarget, { download: true, labels: { - url: '{% url "api-part-label-list" %}', - key: 'part', + model_type: 'part', }, singular_name: '{% trans "part" %}', plural_name: '{% trans "parts" %}', diff --git a/src/backend/InvenTree/templates/js/translated/plugin.js b/src/backend/InvenTree/templates/js/translated/plugin.js index 1c5b3db908..699853f6f4 100644 --- a/src/backend/InvenTree/templates/js/translated/plugin.js +++ b/src/backend/InvenTree/templates/js/translated/plugin.js @@ -114,9 +114,9 @@ function loadPluginTable(table, options={}) { // Check if custom plugins are enabled for this instance if (options.custom && !row.is_builtin && row.is_installed) { if (row.active) { - buttons += makeIconButton('fa-stop-circle icon-red', 'btn-plugin-disable', row.pk, '{% trans "Disable Plugin" %}'); + buttons += makeIconButton('fa-stop-circle icon-red', 'btn-plugin-disable', row.key, '{% trans "Disable Plugin" %}'); } else { - buttons += makeIconButton('fa-play-circle icon-green', 'btn-plugin-enable', row.pk, '{% trans "Enable Plugin" %}'); + buttons += makeIconButton('fa-play-circle icon-green', 'btn-plugin-enable', row.key, '{% trans "Enable Plugin" %}'); } } diff --git a/src/backend/InvenTree/templates/js/translated/purchase_order.js b/src/backend/InvenTree/templates/js/translated/purchase_order.js index c829fed140..eb0571f763 100644 --- a/src/backend/InvenTree/templates/js/translated/purchase_order.js +++ b/src/backend/InvenTree/templates/js/translated/purchase_order.js @@ -1568,8 +1568,7 @@ function loadPurchaseOrderTable(table, options) { setupFilterList('purchaseorder', $(table), '#filter-list-purchaseorder', { download: true, report: { - url: '{% url "api-po-report-list" %}', - key: 'order', + key: 'purchaseorder', } }); diff --git a/src/backend/InvenTree/templates/js/translated/report.js b/src/backend/InvenTree/templates/js/translated/report.js index a6d124a3cd..65dee7479c 100644 --- a/src/backend/InvenTree/templates/js/translated/report.js +++ b/src/backend/InvenTree/templates/js/translated/report.js @@ -3,6 +3,7 @@ /* globals attachSelect, closeModal, + constructForm, inventreeGet, openModal, makeOptionsList, @@ -11,98 +12,13 @@ modalSetTitle, modalSubmit, showAlertDialog, + showMessage, */ /* exported printReports, */ -/** - * Present the user with the available reports, - * and allow them to select which report to print. - * - * The intent is that the available report templates have been requested - * (via AJAX) from the server. - */ -function selectReport(reports, items, options={}) { - - // If there is only a single report available, just print! - if (reports.length == 1) { - if (options.success) { - options.success(reports[0].pk); - } - - return; - } - - var modal = options.modal || '#modal-form'; - - var report_list = makeOptionsList( - reports, - function(item) { - var text = item.name; - - if (item.description) { - text += ` - ${item.description}`; - } - - return text; - }, - function(item) { - return item.pk; - } - ); - - // Construct form - var html = ''; - - if (items.length > 0) { - - html += ` -
- ${items.length} {% trans "items selected" %} -
`; - } - - html += ` -
-
- -
- -
-
-
`; - - openModal({ - modal: modal, - }); - - modalEnable(modal, true); - modalSetTitle(modal, '{% trans "Select Test Report Template" %}'); - modalSetContent(modal, html); - - attachSelect(modal); - - modalSubmit(modal, function() { - - var label = $(modal).find('#id_report'); - - var pk = label.val(); - - closeModal(modal); - - if (options.success) { - options.success(pk); - } - }); - -} - /* * Print report(s) for the selected items: @@ -112,49 +28,52 @@ function selectReport(reports, items, options={}) { * - Request printed document * * Required options: - * - url: The list URL for the particular template type + * - model_type: The "type" of report template to print against * - items: The list of objects to print - * - key: The key to use in the query parameters */ -function printReports(options) { +function printReports(model_type, items) { - if (!options.items || options.items.length == 0) { + if (!items || items.length == 0) { showAlertDialog( '{% trans "Select Items" %}', - '{% trans "No items selected for printing" }', + '{% trans "No items selected for printing" %}', ); return; } - let params = { - enabled: true, - }; + // Join the items with a comma character + const item_string = items.join(','); - params[options.key] = options.items; - - // Request a list of available report templates - inventreeGet(options.url, params, { - success: function(response) { - if (response.length == 0) { - showAlertDialog( - '{% trans "No Reports Found" %}', - '{% trans "No report templates found which match the selected items" %}', - ); - return; - } - - // Select report template for printing - selectReport(response, options.items, { - success: function(pk) { - let href = `${options.url}${pk}/print/?`; - - options.items.forEach(function(item) { - href += `${options.key}=${item}&`; - }); - - window.open(href); + constructForm('{% url "api-report-print" %}', { + method: 'POST', + title: '{% trans "Print Report" %}', + fields: { + template: { + filters: { + enabled: true, + model_type: model_type, + items: item_string, } - }); + }, + items: { + hidden: true, + value: items, + } + }, + onSuccess: function(response) { + if (response.complete) { + if (response.output) { + window.open(response.output, '_blank'); + } else { + showMessage('{% trans "Report print successful" %}', { + style: 'success' + }); + } + } else { + showMessage('{% trans "Report printing failed" %}', { + style: 'warning', + }); + } } - }); + }) } diff --git a/src/backend/InvenTree/templates/js/translated/return_order.js b/src/backend/InvenTree/templates/js/translated/return_order.js index 5163b9696d..23c921dfc2 100644 --- a/src/backend/InvenTree/templates/js/translated/return_order.js +++ b/src/backend/InvenTree/templates/js/translated/return_order.js @@ -242,8 +242,7 @@ function loadReturnOrderTable(table, options={}) { setupFilterList('returnorder', $(table), '#filter-list-returnorder', { download: true, report: { - url: '{% url "api-return-order-report-list" %}', - key: 'order', + key: 'returnorder', } }); diff --git a/src/backend/InvenTree/templates/js/translated/sales_order.js b/src/backend/InvenTree/templates/js/translated/sales_order.js index 53085cf180..358c91b2ae 100644 --- a/src/backend/InvenTree/templates/js/translated/sales_order.js +++ b/src/backend/InvenTree/templates/js/translated/sales_order.js @@ -473,7 +473,59 @@ function completePendingShipmentsHelper(shipments, shipment_idx, options={}) { /* - * Launches a modal form to mark a SalesOrder as "complete" + * Launches a modal form to mark a SalesOrder as "shipped" + */ +function shipSalesOrder(order_id, options={}) { + + constructForm( + `/api/order/so/${order_id}/complete/`, + { + method: 'POST', + title: '{% trans "Ship Sales Order" %}', + confirm: true, + fieldsFunction: function(opts) { + var fields = { + accept_incomplete: {}, + }; + + if (opts.context.is_complete) { + delete fields['accept_incomplete']; + } + + return fields; + }, + preFormContent: function(opts) { + var html = ` +
+ {% trans "Ship this order?" %} +
`; + + if (opts.context.pending_shipments) { + html += ` +
+ {% trans "Order cannot be shipped as there are incomplete shipments" %}
+
`; + } + + if (!opts.context.is_complete) { + html += ` +
+ {% trans "This order has line items which have not been completed." %}
+ {% trans "Shipping this order means that the order and line items will no longer be editable." %} +
`; + } + + return html; + }, + onSuccess: function(response) { + handleFormSuccess(response, options); + } + } + ); +} + +/* + * Launches a modal form to mark a SalesOrder as "completed" */ function completeSalesOrder(order_id, options={}) { @@ -500,21 +552,6 @@ function completeSalesOrder(order_id, options={}) { {% trans "Mark this order as complete?" %}
`; - if (opts.context.pending_shipments) { - html += ` -
- {% trans "Order cannot be completed as there are incomplete shipments" %}
-
`; - } - - if (!opts.context.is_complete) { - html += ` -
- {% trans "This order has line items which have not been completed." %}
- {% trans "Completing this order means that the order and line items will no longer be editable." %} -
`; - } - return html; }, onSuccess: function(response) { @@ -645,8 +682,7 @@ function loadSalesOrderTable(table, options) { setupFilterList('salesorder', $(table), '#filter-list-salesorder', { download: true, report: { - url: '{% url "api-so-report-list" %}', - key: 'order' + key: 'salesorder' } }); diff --git a/src/backend/InvenTree/templates/js/translated/stock.js b/src/backend/InvenTree/templates/js/translated/stock.js index 5254eec00f..d5d9e15e4b 100644 --- a/src/backend/InvenTree/templates/js/translated/stock.js +++ b/src/backend/InvenTree/templates/js/translated/stock.js @@ -1110,11 +1110,8 @@ function adjustStock(action, items, options={}) { classes: 'float-right' }); - var quantity = item.quantity; + let quantityString = ''; - if (item.part_detail.units != null) { - quantity += ` ${item.part_detail.units}`; - } var location = locationDetail(item, false); @@ -1122,12 +1119,18 @@ function adjustStock(action, items, options={}) { location = item.location_detail.pathstring; } - if (item.serial != null) { - quantity = `#${item.serial}`; + if (!item.serial) { + quantityString = `${item.quantity}`; + + if (item.part_detail?.units) { + quantityString += ` [${item.part_detail.units}]`; + } + } else { + quantityString = `#${item.serial}`; } if (item.batch) { - quantity += ` - {% trans "Batch" %}: ${item.batch}`; + quantityString += ` - {% trans "Batch" %}: ${item.batch}`; } var actionInput = ''; @@ -1158,7 +1161,7 @@ function adjustStock(action, items, options={}) { html += ` ${thumb} ${item.part_detail.full_name} - ${quantity}${status} + ${quantityString}${status} ${location}
@@ -1941,12 +1944,10 @@ function loadStockTable(table, options) { setupFilterList(filterKey, table, filterTarget, { download: true, report: { - url: '{% url "api-stockitem-testreport-list" %}', - key: 'item', + key: 'stockitem', }, labels: { - url: '{% url "api-stockitem-label-list" %}', - key: 'item', + model_type: 'stockitem', }, singular_name: '{% trans "stock item" %}', plural_name: '{% trans "stock items" %}', @@ -2566,8 +2567,7 @@ function loadStockLocationTable(table, options) { setupFilterList(filterKey, table, filterListElement, { download: true, labels: { - url: '{% url "api-stocklocation-label-list" %}', - key: 'location' + model_type: 'stocklocation', }, singular_name: '{% trans "stock location" %}', plural_name: '{% trans "stock locations" %}', diff --git a/src/backend/InvenTree/templates/pui_banner.html b/src/backend/InvenTree/templates/pui_banner.html new file mode 100644 index 0000000000..d6eb0746f3 --- /dev/null +++ b/src/backend/InvenTree/templates/pui_banner.html @@ -0,0 +1,17 @@ +{% load inventree_extras %} +{% load i18n %} + +{% inventree_customize 'hide_pui_banner' as hidden %} + +{% if not hidden %} +
+ {% if mode == 'admin' %} + {% trans "Platform UI - the new UI for InvenTree - provides more modern administration options." %} + {% endif %} + {% if mode == 'user' %} + {% trans "Platform UI - the new UI for InvenTree - is ready to be tested." %} + {% endif %} +
+ {% trans "Try it out now" %} {% trans "here" %}. +
+{% endif %} diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index 43fe8ad521..6ff708dbca 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -3,11 +3,12 @@ import datetime import logging -from django.contrib.auth import get_user, login +from django.contrib.auth import get_user, login, logout from django.contrib.auth.models import Group, User from django.urls import include, path, re_path from django.views.generic.base import RedirectView +from allauth.account.adapter import get_adapter from dj_rest_auth.views import LoginView, LogoutView from drf_spectacular.utils import OpenApiResponse, extend_schema, extend_schema_view from rest_framework import exceptions, permissions @@ -17,6 +18,7 @@ from rest_framework.response import Response from rest_framework.views import APIView import InvenTree.helpers +from common.models import InvenTreeSetting from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import ( ListAPI, @@ -216,7 +218,22 @@ class GroupList(ListCreateAPI): class Login(LoginView): """API view for logging in via API.""" - ... + def process_login(self): + """Process the login request, ensure that MFA is enforced if required.""" + # Normal login process + ret = super().process_login() + + # Now check if MFA is enforced + user = self.request.user + adapter = get_adapter(self.request) + + # User requires 2FA or MFA is enforced globally - no logins via API + if adapter.has_2fa_enabled(user) or InvenTreeSetting.get_setting( + 'LOGIN_ENFORCE_MFA' + ): + logout(self.request) + raise exceptions.PermissionDenied('MFA required for this user') + return ret @extend_schema_view( diff --git a/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py new file mode 100644 index 0000000000..cdda226fe9 --- /dev/null +++ b/src/backend/InvenTree/users/migrations/0011_auto_20240523_1640.py @@ -0,0 +1,31 @@ +# Generated by Django 4.2.12 on 2024-05-23 16:40 + +from importlib import import_module + +from django.conf import settings +from django.db import migrations + + +def clear_sessions(apps, schema_editor): + """Clear all user sessions.""" + + try: + engine = import_module(settings.SESSION_ENGINE) + engine.SessionStore.clear_expired() + print('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 +class Migration(migrations.Migration): + + atomic = False + + dependencies = [ + ("users", "0010_alter_apitoken_key"), + ] + + operations = [ + migrations.RunPython( + clear_sessions, reverse_code=migrations.RunPython.noop, + ) + ] diff --git a/src/backend/InvenTree/users/models.py b/src/backend/InvenTree/users/models.py index fc4cc141ec..a544bdec10 100644 --- a/src/backend/InvenTree/users/models.py +++ b/src/backend/InvenTree/users/models.py @@ -34,7 +34,7 @@ logger = logging.getLogger('inventree') # string representation of a user def user_model_str(self): """Function to override the default Django User __str__.""" - if common_models.InvenTreeSetting.get_setting('DISPLAY_FULL_NAMES'): + if common_models.InvenTreeSetting.get_setting('DISPLAY_FULL_NAMES', cache=True): if self.first_name or self.last_name: return f'{self.first_name} {self.last_name}' return self.username @@ -224,11 +224,12 @@ class RuleSet(models.Model): 'auth_permission', 'users_apitoken', 'users_ruleset', + 'report_labeloutput', + 'report_labeltemplate', 'report_reportasset', + 'report_reportoutput', 'report_reportsnippet', - 'report_billofmaterialsreport', - 'report_purchaseorderreport', - 'report_salesorderreport', + 'report_reporttemplate', 'account_emailaddress', 'account_emailconfirmation', 'socialaccount_socialaccount', @@ -270,22 +271,14 @@ class RuleSet(models.Model): 'company_manufacturerpart', 'company_manufacturerpartparameter', 'company_manufacturerpartattachment', - 'label_partlabel', ], 'stocktake': ['part_partstocktake', 'part_partstocktakereport'], - 'stock_location': [ - 'stock_stocklocation', - 'stock_stocklocationtype', - 'label_stocklocationlabel', - 'report_stocklocationreport', - ], + 'stock_location': ['stock_stocklocation', 'stock_stocklocationtype'], 'stock': [ 'stock_stockitem', 'stock_stockitemattachment', 'stock_stockitemtracking', 'stock_stockitemtestresult', - 'report_testreport', - 'label_stockitemlabel', ], 'build': [ 'part_part', @@ -298,8 +291,6 @@ class RuleSet(models.Model): 'build_buildorderattachment', 'stock_stockitem', 'stock_stocklocation', - 'report_buildreport', - 'label_buildlinelabel', ], 'purchase_order': [ 'company_company', @@ -314,7 +305,6 @@ class RuleSet(models.Model): 'order_purchaseorderattachment', 'order_purchaseorderlineitem', 'order_purchaseorderextraline', - 'report_purchaseorderreport', ], 'sales_order': [ 'company_company', @@ -327,7 +317,6 @@ class RuleSet(models.Model): 'order_salesorderlineitem', 'order_salesorderextraline', 'order_salesordershipment', - 'report_salesorderreport', ], 'return_order': [ 'company_company', @@ -338,7 +327,6 @@ class RuleSet(models.Model): 'order_returnorderlineitem', 'order_returnorderextraline', 'order_returnorderattachment', - 'report_returnorderreport', ], } @@ -366,7 +354,6 @@ class RuleSet(models.Model): 'common_projectcode', 'common_webhookendpoint', 'common_webhookmessage', - 'label_labeloutput', 'users_owner', # Third-party tables 'error_report_error', @@ -626,9 +613,9 @@ def update_group_roles(group, debug=False): content_type=content_type, codename=perm ) except ContentType.DoesNotExist: # pragma: no cover - logger.warning( - "Error: Could not find permission matching '%s'", permission_string - ) + # logger.warning( + # "Error: Could not find permission matching '%s'", permission_string + # ) permission = None return permission @@ -831,7 +818,9 @@ class Owner(models.Model): """Defines the owner string representation.""" if ( self.owner_type.name == 'user' - and common_models.InvenTreeSetting.get_setting('DISPLAY_FULL_NAMES') + and common_models.InvenTreeSetting.get_setting( + 'DISPLAY_FULL_NAMES', cache=True + ) ): display_name = self.owner.get_full_name() else: @@ -842,7 +831,9 @@ class Owner(models.Model): """Return the 'name' of this owner.""" if ( self.owner_type.name == 'user' - and common_models.InvenTreeSetting.get_setting('DISPLAY_FULL_NAMES') + and common_models.InvenTreeSetting.get_setting( + 'DISPLAY_FULL_NAMES', cache=True + ) ): return self.owner.get_full_name() or str(self.owner) return str(self.owner) diff --git a/src/backend/InvenTree/users/tests.py b/src/backend/InvenTree/users/tests.py index 84f0cd1668..44ea1ac1e8 100644 --- a/src/backend/InvenTree/users/tests.py +++ b/src/backend/InvenTree/users/tests.py @@ -182,13 +182,13 @@ class OwnerModelTest(InvenTreeTestCase): # Get related owners (user + group) related_owners = group_as_owner.get_related_owners(include_group=True) - self.assertTrue(user_as_owner in related_owners) - self.assertTrue(group_as_owner in related_owners) + self.assertIn(user_as_owner, related_owners) + self.assertIn(group_as_owner, related_owners) # Get related owners (only user) related_owners = group_as_owner.get_related_owners(include_group=False) - self.assertTrue(user_as_owner in related_owners) - self.assertFalse(group_as_owner in related_owners) + self.assertIn(user_as_owner, related_owners) + self.assertNotIn(group_as_owner, related_owners) # Get related owners on user related_owners = user_as_owner.get_related_owners() diff --git a/src/backend/InvenTree/web/tests.py b/src/backend/InvenTree/web/tests.py index df13a20d30..d63fe112d0 100644 --- a/src/backend/InvenTree/web/tests.py +++ b/src/backend/InvenTree/web/tests.py @@ -18,10 +18,10 @@ class TemplateTagTest(InvenTreeTestCase): def assertSettings(self, settings_data): """Helper to test if needed args are in the settings.""" - self.assertTrue('debug' in settings_data) - self.assertTrue('server_list' in settings_data) - self.assertTrue('show_server_selector' in settings_data) - self.assertTrue('environment' in settings_data) + self.assertIn('debug', settings_data) + self.assertIn('server_list', settings_data) + self.assertIn('show_server_selector', settings_data) + self.assertIn('environment', settings_data) def test_spa_bundle(self): """Test the 'spa_bundle' template tag.""" @@ -32,8 +32,8 @@ class TemplateTagTest(InvenTreeTestCase): return # pragma: no cover shipped_js = resp.split('